SecureVector<Botan::byte> ne7ssh_keys::generateRSASignature (Botan::SecureVector<Botan::byte>& sessionID, Botan::SecureVector<Botan::byte>& signingData) { SecureVector<Botan::byte> sigRaw; ne7ssh_string sigData, sig; sigData.addVectorField (sessionID); sigData.addVector (signingData); if (!rsaPrivateKey) { ne7ssh::errors()->push (-1, "Private RSA key not initialized."); return sig.value(); } PK_Signer *RSASigner = get_pk_signer (*rsaPrivateKey, "EMSA3(SHA-1)"); #if BOTAN_PRE_18 || BOTAN_PRE_15 sigRaw = RSASigner->sign_message(sigData.value()); #else sigRaw = RSASigner->sign_message(sigData.value(), *ne7ssh::rng); #endif if (!sigRaw.size()) { ne7ssh::errors()->push (-1, "Failure while generating RSA signature."); delete RSASigner; return sig.value(); } delete RSASigner; sig.addString ("ssh-rsa"); sig.addVectorField (sigRaw); return (sig.value()); }
MemoryVector<byte> EAC1_1_ADO::make_signed(PK_Signer& signer, const MemoryRegion<byte>& tbs_bits, RandomNumberGenerator& rng) { SecureVector<byte> concat_sig = signer.sign_message(tbs_bits, rng); return DER_Encoder() .start_cons(ASN1_Tag(7), APPLICATION) .raw_bytes(tbs_bits) .encode(concat_sig, OCTET_STRING, ASN1_Tag(55), APPLICATION) .end_cons() .get_contents(); }
SecureVector<Botan::byte> ne7ssh_keys::generateDSASignature (Botan::SecureVector<Botan::byte>& sessionID, Botan::SecureVector<Botan::byte>& signingData) { SecureVector<Botan::byte> sigRaw; ne7ssh_string sigData, sig; sigData.addVectorField (sessionID); sigData.addVector (signingData); if (!dsaPrivateKey) { ne7ssh::errors()->push (-1, "Private DSA key not initialized."); return sig.value(); } PK_Signer *DSASigner = get_pk_signer (*dsaPrivateKey, "EMSA1(SHA-1)"); #if BOTAN_PRE_18 || BOTAN_PRE_15 sigRaw = DSASigner->sign_message(sigData.value()); #else sigRaw = DSASigner->sign_message(sigData.value(), *ne7ssh::rng); #endif if (!sigRaw.size()) { ne7ssh::errors()->push (-1, "Failure to generate DSA signature."); delete DSASigner; return sig.value(); } if (sigRaw.size() != 40) { ne7ssh::errors()->push (-1, "DSS signature block <> 320 bits. Make sure you are using 1024 bit keys for authentication!"); sig.clear(); return sig.value(); } delete DSASigner; sig.addString ("ssh-dss"); sig.addVectorField (sigRaw); return (sig.value()); }