LCOV - code coverage report
Current view: top level - shared_model/cryptography/ed25519_sha3_impl/internal - ed25519_impl.cpp (source / functions) Hit Total Coverage
Test: cleared_cor.info Lines: 29 30 96.7 %
Date: 2019-03-07 14:46:43 Functions: 7 8 87.5 %

          Line data    Source code
       1             : /**
       2             :  * Copyright Soramitsu Co., Ltd. All Rights Reserved.
       3             :  * SPDX-License-Identifier: Apache-2.0
       4             :  */
       5             : 
       6             : #include <ed25519/ed25519.h>
       7             : 
       8             : #include "cryptography/ed25519_sha3_impl/internal/ed25519_impl.hpp"
       9             : #include "cryptography/ed25519_sha3_impl/internal/sha3_hash.hpp"
      10             : 
      11             : namespace iroha {
      12             : 
      13             :   /**
      14             :    * Sign the message
      15             :    */
      16             :   sig_t sign(const uint8_t *msg,
      17             :              size_t msgsize,
      18             :              const pubkey_t &pub,
      19             :              const privkey_t &priv) {
      20        6462 :     sig_t sig;
      21        6462 :     ed25519_sign(reinterpret_cast<signature_t *>(sig.data()),
      22        6462 :                  msg,
      23        6462 :                  msgsize,
      24        6462 :                  reinterpret_cast<const public_key_t *>(pub.data()),
      25        6462 :                  reinterpret_cast<const private_key_t *>(priv.data()));
      26        6462 :     return sig;
      27             :   }
      28             : 
      29             :   sig_t sign(const std::string &msg,
      30             :              const pubkey_t &pub,
      31             :              const privkey_t &priv) {
      32        6461 :     return sign(
      33        6461 :         reinterpret_cast<const uint8_t *>(msg.data()), msg.size(), pub, priv);
      34             :   }
      35             : 
      36             :   /**
      37             :    * Verify signature
      38             :    */
      39             :   bool verify(const uint8_t *msg,
      40             :               size_t msgsize,
      41             :               const pubkey_t &pub,
      42             :               const sig_t &sig) {
      43       16178 :     return 1
      44       16178 :         == ed25519_verify(reinterpret_cast<const signature_t *>(sig.data()),
      45       16178 :                           msg,
      46       16178 :                           msgsize,
      47       16178 :                           reinterpret_cast<const public_key_t *>(pub.data()));
      48             :   }
      49             : 
      50             :   bool verify(const std::string &msg, const pubkey_t &pub, const sig_t &sig) {
      51       16170 :     return 1
      52       16170 :         == verify(reinterpret_cast<const uint8_t *>(msg.data()),
      53       16170 :                   msg.size(),
      54       16170 :                   pub,
      55       16170 :                   sig);
      56             :   }
      57             : 
      58             :   /**
      59             :    * Generate seed
      60             :    */
      61             :   blob_t<32> create_seed() {
      62         718 :     blob_t<32> seed;
      63         718 :     randombytes(seed.data(), seed.size());
      64         718 :     return seed;
      65             :   }
      66             : 
      67             :   /**
      68             :    * Generate 32 bytes seed based on a passphrase
      69             :    * @param passphrase
      70             :    * @return
      71             :    */
      72             :   blob_t<32> create_seed(std::string passphrase) {
      73           0 :     return sha3_256((uint8_t *)passphrase.data(), passphrase.size());
      74             :   }
      75             : 
      76             :   /**
      77             :    * Create keypair
      78             :    */
      79             :   keypair_t create_keypair(blob_t<32> seed) {
      80         718 :     keypair_t kp;
      81         718 :     kp.privkey = seed;
      82             : 
      83         718 :     ed25519_derive_public_key(
      84         718 :         reinterpret_cast<const private_key_t *>(kp.privkey.data()),
      85         718 :         reinterpret_cast<public_key_t *>(kp.pubkey.data()));
      86             : 
      87         718 :     return kp;
      88             :   }
      89             : 
      90             :   keypair_t create_keypair() {
      91           4 :     return create_keypair(create_seed());
      92             :   }
      93             : }  // namespace iroha

Generated by: LCOV version 1.13