| 833 | } |
| 834 | |
| 835 | PrivateKeys PrivateKeys::CreateOfflineKeys (SigningKeyType type, uint32_t expires) const |
| 836 | { |
| 837 | PrivateKeys keys (*this); |
| 838 | std::unique_ptr<i2p::crypto::Verifier> verifier (IdentityEx::CreateVerifier (type)); |
| 839 | if (verifier) |
| 840 | { |
| 841 | size_t pubKeyLen = verifier->GetPublicKeyLen (); |
| 842 | keys.m_TransientSigningPrivateKeyLen = verifier->GetPrivateKeyLen (); |
| 843 | keys.m_TransientSignatureLen = verifier->GetSignatureLen (); |
| 844 | keys.m_OfflineSignature.resize (pubKeyLen + m_Public->GetSignatureLen () + 6); |
| 845 | keys.m_SigningPrivateKey.resize (verifier->GetPrivateKeyLen ()); |
| 846 | htobe32buf (keys.m_OfflineSignature.data (), expires); // expires |
| 847 | htobe16buf (keys.m_OfflineSignature.data () + 4, type); // type |
| 848 | GenerateSigningKeyPair (type, keys.m_SigningPrivateKey.data (), keys.m_OfflineSignature.data () + 6); // public key |
| 849 | Sign (keys.m_OfflineSignature.data (), pubKeyLen + 6, keys.m_OfflineSignature.data () + 6 + pubKeyLen); // signature |
| 850 | // recreate signer |
| 851 | keys.m_Signer = nullptr; |
| 852 | keys.CreateSigner (type); |
| 853 | } |
| 854 | return keys; |
| 855 | } |
| 856 | |
| 857 | Keys CreateRandomKeys () |
| 858 | { |
nothing calls this directly
no test coverage detected