add missing NIDs and use Nid as input to signing

This commit is contained in:
Chris Dawes 2016-05-04 09:00:05 +01:00
parent 6f410a25b2
commit a5ede6a851
2 changed files with 45 additions and 40 deletions

View File

@ -6,24 +6,7 @@ use std::io::{self, Read};
use bn::BigNum; use bn::BigNum;
use bio::MemBio; use bio::MemBio;
use nid::Nid;
#[derive(Copy, Clone, Debug)]
pub enum PKCSHashType {
SHA256,
SHA384,
SHA512
}
/// https://github.com/openssl/openssl/blob/master/include/openssl/obj_mac.h#L2790
impl Into<i32> for PKCSHashType {
fn into(self) -> i32 {
match self {
PKCSHashType::SHA256 => 672,
PKCSHashType::SHA384 => 673,
PKCSHashType::SHA512 => 674
}
}
}
pub struct RSA(*mut ffi::RSA); pub struct RSA(*mut ffi::RSA);
@ -109,13 +92,13 @@ impl RSA {
} }
} }
pub fn sign(&self, hash_id: PKCSHashType, message: &[u8]) -> Result<Vec<u8>, SslError> { pub fn sign(&self, hash_id: Nid, message: &[u8]) -> Result<Vec<u8>, SslError> {
let k_len = try!(self.size()); let k_len = try!(self.size());
let mut sig = vec![0;k_len as usize]; let mut sig = vec![0;k_len as usize];
let mut sig_len = k_len; let mut sig_len = k_len;
unsafe { unsafe {
let result = ffi::RSA_sign(hash_id.into(), message.as_ptr(), message.len() as u32, sig.as_mut_ptr(), &mut sig_len, self.0); let result = ffi::RSA_sign(hash_id as i32, message.as_ptr(), message.len() as u32, sig.as_mut_ptr(), &mut sig_len, self.0);
assert!(sig_len == k_len); assert!(sig_len == k_len);
if result == 1 { if result == 1 {
@ -126,9 +109,9 @@ impl RSA {
} }
} }
pub fn verify(&self, hash_id: PKCSHashType, message: &[u8], sig: &[u8]) -> Result<bool, SslError> { pub fn verify(&self, hash_id: Nid, message: &[u8], sig: &[u8]) -> Result<bool, SslError> {
unsafe { unsafe {
let result = ffi::RSA_verify(hash_id.into(), message.as_ptr(), message.len() as u32, sig.as_ptr(), sig.len() as u32, self.0); let result = ffi::RSA_verify(hash_id as i32, message.as_ptr(), message.len() as u32, sig.as_ptr(), sig.len() as u32, self.0);
Ok(result == 1) Ok(result == 1)
} }

View File

@ -2,7 +2,7 @@
#[derive(Copy, Clone, Hash, PartialEq, Eq)] #[derive(Copy, Clone, Hash, PartialEq, Eq)]
#[repr(usize)] #[repr(usize)]
pub enum Nid { pub enum Nid {
Undefined, Undefined, // 0
Rsadsi, Rsadsi,
Pkcs, Pkcs,
MD2, MD2,
@ -12,7 +12,7 @@ pub enum Nid {
RsaEncryption, RsaEncryption,
RSA_MD2, RSA_MD2,
RSA_MD5, RSA_MD5,
PBE_MD2_DES, PBE_MD2_DES, // 10
X500, X500,
x509, x509,
CN, CN,
@ -22,7 +22,7 @@ pub enum Nid {
O, O,
OU, OU,
RSA, RSA,
Pkcs7, Pkcs7, // 20
Pkcs7_data, Pkcs7_data,
Pkcs7_signedData, Pkcs7_signedData,
Pkcs7_envelopedData, Pkcs7_envelopedData,
@ -32,7 +32,7 @@ pub enum Nid {
Pkcs3, Pkcs3,
DhKeyAgreement, DhKeyAgreement,
DES_ECB, DES_ECB,
DES_CFB, DES_CFB, // 30
DES_CBC, DES_CBC,
DES_EDE, DES_EDE,
DES_EDE3, DES_EDE3,
@ -42,7 +42,7 @@ pub enum Nid {
RC2_CBC, RC2_CBC,
RC2_ECB, RC2_ECB,
RC2_CFB, RC2_CFB,
RC2_OFB, RC2_OFB, // 40
SHA, SHA,
RSA_SHA, RSA_SHA,
DES_EDE_CBC, DES_EDE_CBC,
@ -52,7 +52,7 @@ pub enum Nid {
Pkcs9, Pkcs9,
Email, Email,
UnstructuredName, UnstructuredName,
ContentType, ContentType, // 50
MessageDigest, MessageDigest,
SigningTime, SigningTime,
CounterSignature, CounterSignature,
@ -62,7 +62,7 @@ pub enum Nid {
Netscape, Netscape,
NetscapeCertExtention, NetscapeCertExtention,
NetscapeDatatype, NetscapeDatatype,
DES_EDE_CFB64, DES_EDE_CFB64, // 60
DES_EDE3_CFB64, DES_EDE3_CFB64,
DES_EDE_OFB64, DES_EDE_OFB64,
DES_EDE3_OFB64, DES_EDE3_OFB64,
@ -72,7 +72,7 @@ pub enum Nid {
DSA_OLD, DSA_OLD,
PBE_SHA1_RC2_64, PBE_SHA1_RC2_64,
PBKDF2, PBKDF2,
DSA_SHA1_OLD, DSA_SHA1_OLD, // 70
NetscapeCertType, NetscapeCertType,
NetscapeBaseUrl, NetscapeBaseUrl,
NetscapeRevocationUrl, NetscapeRevocationUrl,
@ -82,7 +82,7 @@ pub enum Nid {
NetscapeSSLServerName, NetscapeSSLServerName,
NetscapeComment, NetscapeComment,
NetscapeCertSequence, NetscapeCertSequence,
DESX_CBC, DESX_CBC, // 80
ID_CE, ID_CE,
SubjectKeyIdentifier, SubjectKeyIdentifier,
KeyUsage, KeyUsage,
@ -92,7 +92,7 @@ pub enum Nid {
BasicConstraints, BasicConstraints,
CrlNumber, CrlNumber,
CertificatePolicies, CertificatePolicies,
AuthorityKeyIdentifier, AuthorityKeyIdentifier, // 90
BF_CBC, BF_CBC,
BF_ECB, BF_ECB,
BF_CFB, BF_CFB,
@ -102,7 +102,7 @@ pub enum Nid {
RC4_40, RC4_40,
RC2_40_CBC, RC2_40_CBC,
G, G,
S, S, // 100
I, I,
/// uniqueIdentifier /// uniqueIdentifier
UID, UID,
@ -113,7 +113,7 @@ pub enum Nid {
D, D,
CAST5_CBC, CAST5_CBC,
CAST5_ECB, CAST5_ECB,
CAST5_CFB, CAST5_CFB, // 110
CAST5_OFB, CAST5_OFB,
PbeWithMD5AndCast5CBC, PbeWithMD5AndCast5CBC,
DSA_SHA1, DSA_SHA1,
@ -123,7 +123,7 @@ pub enum Nid {
RIPEMD160, RIPEMD160,
// 118 missing // 118 missing
RSA_RIPEMD160 = 119, RSA_RIPEMD160 = 119,
RC5_CBC, RC5_CBC, // 120
RC5_ECB, RC5_ECB,
RC5_CFB, RC5_CFB,
RC5_OFB, RC5_OFB,
@ -133,7 +133,7 @@ pub enum Nid {
PKIX, PKIX,
ID_KP, ID_KP,
ServerAuth, ServerAuth,
ClientAuth, ClientAuth, // 130
CodeSigning, CodeSigning,
EmailProtection, EmailProtection,
TimeStamping, TimeStamping,
@ -143,7 +143,7 @@ pub enum Nid {
MsSGC, MsSGC,
MsEFS, MsEFS,
NsSGC, NsSGC,
DeltaCRL, DeltaCRL, // 140
CRLReason, CRLReason,
InvalidityDate, InvalidityDate,
SXNetID, SXNetID,
@ -153,7 +153,7 @@ pub enum Nid {
PBE_SHA1_2DES, PBE_SHA1_2DES,
PBE_SHA1_RC2_128, PBE_SHA1_RC2_128,
PBE_SHA1_RC2_40, PBE_SHA1_RC2_40,
KeyBag, KeyBag, // 150
Pkcs8ShroudedKeyBag, Pkcs8ShroudedKeyBag,
CertBag, CertBag,
CrlBag, CrlBag,
@ -163,7 +163,7 @@ pub enum Nid {
LocalKeyID, LocalKeyID,
X509Certificate, X509Certificate,
SdsiCertificate, SdsiCertificate,
X509Crl, X509Crl, // 160
PBES2, PBES2,
PBMAC1, PBMAC1,
HmacWithSha1, HmacWithSha1,
@ -171,6 +171,28 @@ pub enum Nid {
ID_QT_UNOTICE, ID_QT_UNOTICE,
RC2_64_CBC, RC2_64_CBC,
SMIMECaps, SMIMECaps,
PBE_MD2_RC2_64,
PBE_MD5_RC2_64,
PBE_SHA1_DES,
MicrosoftExtensionRequest,
ExtensionRequest,
Name,
DnQualifier,
IdPe,
IdAd,
AuthorityInfoAccess,
OCSP,
CaIssuers,
OCSPSigning, // 180
// 181 and up are from openssl's obj_mac.h
/// Shown as UID in cert subject /// Shown as UID in cert subject
UserId = 458 UserId = 458,
SHA256 = 672,
SHA384,
SHA512,
} }