8 #include <botan/pbes1.h>
9 #include <botan/pbkdf1.h>
10 #include <botan/der_enc.h>
11 #include <botan/ber_dec.h>
12 #include <botan/cbc.h>
22 m_pipe.
write(input, length);
58 void PBE_PKCS5v15::flush_pipe(
bool safe_to_skip)
60 if(safe_to_skip && m_pipe.
remaining() < 64)
66 size_t got = m_pipe.
read(&buffer[0], buffer.size());
89 const OID base_pbes1_oid(
"1.2.840.113549.1.5");
91 const std::string cipher = m_block_cipher->
name();
92 const std::string digest = m_hash_function->
name();
94 if(cipher ==
"DES" && digest ==
"MD2")
95 return (base_pbes1_oid + 1);
96 else if(cipher ==
"DES" && digest ==
"MD5")
97 return (base_pbes1_oid + 3);
98 else if(cipher ==
"DES" && digest ==
"SHA-160")
99 return (base_pbes1_oid + 10);
100 else if(cipher ==
"RC2" && digest ==
"MD2")
101 return (base_pbes1_oid + 4);
102 else if(cipher ==
"RC2" && digest ==
"MD5")
103 return (base_pbes1_oid + 6);
104 else if(cipher ==
"RC2" && digest ==
"SHA-160")
105 return (base_pbes1_oid + 11);
107 throw Internal_Error(
"PBE-PKCS5 v1.5: get_oid() has run out of options");
112 return "PBE-PKCS5v15(" + m_block_cipher->
name() +
"," +
113 m_hash_function->
name() +
")";
119 std::chrono::milliseconds msec,
122 m_block_cipher(cipher),
123 m_hash_function(hash),
124 m_salt(rng.random_vec(8))
126 if(cipher->
name() !=
"DES" && cipher->
name() !=
"RC2")
132 if(hash->
name() !=
"MD2" && hash->
name() !=
"MD5" &&
133 hash->
name() !=
"SHA-160")
143 &m_salt[0], m_salt.size(),
144 msec, m_iterations).bits_of();
146 m_key.assign(&key_and_iv[0], &key_and_iv[8]);
147 m_iv.assign(&key_and_iv[8], &key_and_iv[16]);
153 const std::vector<byte>& params,
156 m_block_cipher(cipher),
157 m_hash_function(hash)
159 if(cipher->
name() !=
"DES" && cipher->
name() !=
"RC2")
165 if(hash->
name() !=
"MD2" && hash->
name() !=
"MD5" &&
166 hash->
name() !=
"SHA-160")
179 if(m_salt.size() != 8)
186 &m_salt[0], m_salt.size(),
187 m_iterations).bits_of();
189 m_key.assign(&key_and_iv[0], &key_and_iv[8]);
190 m_iv.assign(&key_and_iv[8], &key_and_iv[16]);
195 delete m_block_cipher;
196 delete m_hash_function;