本文整理汇总了C++中DER_Encoder::start_cons方法的典型用法代码示例。如果您正苦于以下问题:C++ DER_Encoder::start_cons方法的具体用法?C++ DER_Encoder::start_cons怎么用?C++ DER_Encoder::start_cons使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DER_Encoder
的用法示例。
在下文中一共展示了DER_Encoder::start_cons方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: compress
/*
* Compress a message
*/
void CMS_Encoder::compress(const std::string& algo)
{
if(!CMS_Encoder::can_compress_with(algo))
throw Invalid_Argument("CMS_Encoder: Cannot compress with " + algo);
Filter* compressor = 0;
#if defined(BOTAN_HAS_COMPRESSOR_ZLIB)
if(algo == "Zlib") compressor = new Zlib_Compression;
#endif
if(compressor == 0)
throw Internal_Error("CMS: Couldn't get ahold of a compressor");
Pipe pipe(compressor);
pipe.process_msg(data);
SecureVector<byte> compressed = pipe.read_all();
DER_Encoder encoder;
encoder.start_cons(SEQUENCE).
encode(static_cast<size_t>(0)).
encode(AlgorithmIdentifier("Compression." + algo,
MemoryVector<byte>())).
raw_bytes(make_econtent(compressed, type)).
end_cons();
add_layer("CMS.CompressedData", encoder);
}
示例2: encode_into
/*
* DER encode an AlgorithmIdentifier
*/
void AlgorithmIdentifier::encode_into(DER_Encoder& codec) const
{
codec.start_cons(SEQUENCE)
.encode(oid)
.raw_bytes(parameters)
.end_cons();
}
示例3: generateOpenSslPrivateKeyString
void SshKeyGenerator::generateOpenSslPrivateKeyString(const KeyPtr &key)
{
QList<BigInt> params;
QByteArray keyId;
const char *label;
if (m_type == Rsa) {
const QSharedPointer<RSA_PrivateKey> rsaKey
= key.dynamicCast<RSA_PrivateKey>();
params << rsaKey->get_n() << rsaKey->get_e() << rsaKey->get_d() << rsaKey->get_p()
<< rsaKey->get_q();
keyId = SshCapabilities::PubKeyRsa;
label = "RSA PRIVATE KEY";
} else {
const QSharedPointer<DSA_PrivateKey> dsaKey = key.dynamicCast<DSA_PrivateKey>();
params << dsaKey->group_p() << dsaKey->group_q() << dsaKey->group_g() << dsaKey->get_y()
<< dsaKey->get_x();
keyId = SshCapabilities::PubKeyDss;
label = "DSA PRIVATE KEY";
}
DER_Encoder encoder;
encoder.start_cons(SEQUENCE).encode(0U);
foreach (const BigInt &b, params)
encoder.encode(b);
encoder.end_cons();
m_privateKey = QByteArray(PEM_Code::encode (encoder.get_contents(), label).c_str());
}
示例4: encode_into
/*
* DER encode a Attribute
*/
void Attribute::encode_into(DER_Encoder& codec) const
{
codec.start_cons(SEQUENCE)
.encode(oid)
.start_cons(SET)
.raw_bytes(parameters)
.end_cons()
.end_cons();
}
示例5:
void X509_Object::encode_into(DER_Encoder& to) const
{
to.start_cons(SEQUENCE)
.start_cons(SEQUENCE)
.raw_bytes(m_tbs_bits)
.end_cons()
.encode(m_sig_algo)
.encode(m_sig, BIT_STRING)
.end_cons();
}
示例6:
void X509_Object::encode_into(DER_Encoder& to) const
{
to.start_cons(SEQUENCE)
.start_cons(SEQUENCE)
.raw_bytes(signed_body())
.end_cons()
.encode(signature_algorithm())
.encode(signature(), BIT_STRING)
.end_cons();
}
示例7: encode_into
/*
* DER encode a CRL_Entry
*/
void CRL_Entry::encode_into(DER_Encoder& der) const
{
der.start_cons(SEQUENCE)
.encode(BigInt::decode(serial_number()))
.encode(expire_time())
.start_cons(SEQUENCE)
.encode(extensions())
.end_cons()
.end_cons();
}
示例8: encode_into
/*
* DER encode a CRL_Entry
*/
void CRL_Entry::encode_into(DER_Encoder& der) const
{
Extensions extensions;
extensions.add(new Cert_Extension::CRL_ReasonCode(reason));
der.start_cons(SEQUENCE)
.encode(BigInt::decode(serial, serial.size()))
.encode(time)
.encode(extensions)
.end_cons();
}
示例9:
/*
* DER encode a DistinguishedName
*/
void X509_DN::encode_into(DER_Encoder& der) const
{
std::multimap<OID, std::string> dn_info = get_attributes();
der.start_cons(SEQUENCE);
if(!dn_bits.empty())
der.raw_bytes(dn_bits);
else
{
do_ava(der, dn_info, PRINTABLE_STRING, "X520.Country");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.State");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.Locality");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.Organization");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.OrganizationalUnit");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.CommonName");
do_ava(der, dn_info, PRINTABLE_STRING, "X520.SerialNumber");
}
der.end_cons();
}
示例10: generateOpenSslKeys
bool SshKeyGenerator::generateOpenSslKeys(const KeyPtr &key)
{
QList<BigInt> publicParams;
QList<BigInt> allParams;
QByteArray keyId;
if (m_type == Rsa) {
const QSharedPointer<RSA_PrivateKey> rsaKey
= key.dynamicCast<RSA_PrivateKey>();
publicParams << rsaKey->get_e() << rsaKey->get_n();
allParams << rsaKey->get_n() << rsaKey->get_e() << rsaKey->get_d()
<< rsaKey->get_p() << rsaKey->get_q();
keyId = SshCapabilities::PubKeyRsa;
} else {
const QSharedPointer<DSA_PrivateKey> dsaKey
= key.dynamicCast<DSA_PrivateKey>();
publicParams << dsaKey->group_p() << dsaKey->group_q()
<< dsaKey->group_g() << dsaKey->get_y();
allParams << publicParams << dsaKey->get_x();
keyId = SshCapabilities::PubKeyDss;
}
QByteArray publicKeyBlob = AbstractSshPacket::encodeString(keyId);
foreach (const BigInt &b, publicParams)
publicKeyBlob += AbstractSshPacket::encodeMpInt(b);
publicKeyBlob = publicKeyBlob.toBase64();
const QByteArray id = "QtCreator/"
+ QDateTime::currentDateTime().toString(Qt::ISODate).toUtf8();
m_publicKey = keyId + ' ' + publicKeyBlob + ' ' + id;
DER_Encoder encoder;
encoder.start_cons(SEQUENCE).encode (0U);
foreach (const BigInt &b, allParams)
encoder.encode(b);
encoder.end_cons();
const char * const label
= m_type == Rsa ? "RSA PRIVATE KEY" : "DSA PRIVATE KEY";
m_privateKey
= QByteArray(PEM_Code::encode (encoder.get_contents(), label).c_str());
return true;
}
示例11: generateOpenSslPrivateKeyString
void SshKeyGenerator::generateOpenSslPrivateKeyString(const KeyPtr &key)
{
QList<BigInt> params;
const char *label = "";
switch (m_type) {
case Rsa: {
const QSharedPointer<RSA_PrivateKey> rsaKey
= key.dynamicCast<RSA_PrivateKey>();
params << rsaKey->get_n() << rsaKey->get_e() << rsaKey->get_d() << rsaKey->get_p()
<< rsaKey->get_q();
const BigInt dmp1 = rsaKey->get_d() % (rsaKey->get_p() - 1);
const BigInt dmq1 = rsaKey->get_d() % (rsaKey->get_q() - 1);
const BigInt iqmp = inverse_mod(rsaKey->get_q(), rsaKey->get_p());
params << dmp1 << dmq1 << iqmp;
label = "RSA PRIVATE KEY";
break;
}
case Dsa: {
const QSharedPointer<DSA_PrivateKey> dsaKey = key.dynamicCast<DSA_PrivateKey>();
params << dsaKey->group_p() << dsaKey->group_q() << dsaKey->group_g() << dsaKey->get_y()
<< dsaKey->get_x();
label = "DSA PRIVATE KEY";
break;
}
case Ecdsa:
params << key.dynamicCast<ECDSA_PrivateKey>()->private_value();
label = "EC PRIVATE KEY";
break;
}
DER_Encoder encoder;
encoder.start_cons(SEQUENCE).encode(size_t(0));
foreach (const BigInt &b, params)
encoder.encode(b);
encoder.end_cons();
m_privateKey = QByteArray(PEM_Code::encode (encoder.get_contents(), label).c_str());
}
示例12: dsaGroup
bool ne7ssh_keys::generateDSAKeys (const char* fqdn, const char* privKeyFileName, const char* pubKeyFileName, uint16 keySize)
{
DER_Encoder encoder;
BigInt p, q, g, y, x;
ne7ssh_string pubKeyBlob;
FILE *privKeyFile, *pubKeyFile;
std::string privKeyEncoded;
if (keySize != 1024)
{
ne7ssh::errors()->push (-1, "DSA keys must be 1024 bits.");
return false;
}
#if BOTAN_PRE_18 || BOTAN_PRE_15
DL_Group dsaGroup (keySize, DL_Group::DSA_Kosherizer);
DSA_PrivateKey privDsaKey (dsaGroup);
#else
DL_Group dsaGroup (*ne7ssh::rng, Botan::DL_Group::DSA_Kosherizer, keySize);
DSA_PrivateKey privDsaKey (*ne7ssh::rng, dsaGroup);
#endif
DSA_PublicKey pubDsaKey = privDsaKey;
p = dsaGroup.get_p();
q = dsaGroup.get_q();
g = dsaGroup.get_g();
y = pubDsaKey.get_y();
x = privDsaKey.get_x();
pubKeyBlob.addString ("ssh-dss");
pubKeyBlob.addBigInt (p);
pubKeyBlob.addBigInt (q);
pubKeyBlob.addBigInt (g);
pubKeyBlob.addBigInt (y);
Pipe base64it (new Base64_Encoder);
base64it.process_msg(pubKeyBlob.value());
SecureVector<Botan::byte> pubKeyBase64 = base64it.read_all (PIPE_DEFAULT_MESSAGE);
pubKeyFile = fopen (pubKeyFileName, "w");
if (!pubKeyFile)
{
ne7ssh::errors()->push (-1, "Cannot open file where public key is stored. Filename: %s", pubKeyFileName);
return false;
}
if ((!fwrite ("ssh-dss ", 8, 1, pubKeyFile)) ||
(!fwrite (pubKeyBase64.begin(), (size_t) pubKeyBase64.size(), 1, pubKeyFile)) ||
(!fwrite (" ", 1, 1, pubKeyFile)) ||
(!fwrite (fqdn, strlen(fqdn), 1, pubKeyFile)) ||
(!fwrite ("\n", 1, 1, pubKeyFile)))
{
ne7ssh::errors()->push (-1, "I/O error while writting to file: %s.", pubKeyFileName);
return false;
}
fclose (pubKeyFile);
#if BOTAN_PRE_15
encoder.start_sequence();
DER::encode (encoder, 0U);
DER::encode (encoder, p);
DER::encode (encoder, q);
DER::encode (encoder, g);
DER::encode (encoder, y);
DER::encode (encoder, x);
encoder.end_sequence();
#else
encoder.start_cons(SEQUENCE)
.encode (0U)
.encode (p)
.encode (q)
.encode (g)
.encode (y)
.encode (x)
.end_cons();
#endif
privKeyEncoded = PEM_Code::encode (encoder.get_contents(), "DSA PRIVATE KEY");
privKeyFile = fopen (privKeyFileName, "w");
if (!privKeyFile)
{
ne7ssh::errors()->push (-1, "Cannot open file where private key is stored. Filename: %s", privKeyFileName);
return false;
}
if (!fwrite (privKeyEncoded.c_str(), (size_t) privKeyEncoded.length(), 1, privKeyFile))
{
ne7ssh::errors()->push (-1, "I/O error while writting to file: %s.", privKeyFileName);
return false;
}
fclose (privKeyFile);
// delete dsaGroup;
return true;
}