Добавление обязательного атрибута в подпись
Пытаюсь добавить id-aa-signingCertificate в обязательные атрибуты, описал структуры согласно стандарту rfc2634
/*
SigningCertificate ::= SEQUENCE {
certs SEQUENCE OF ESSCertID,
policies SEQUENCE OF PolicyInformation OPTIONAL
}
ESSCertID ::= SEQUENCE {
certHash Hash,
issuerSerial IssuerSerial OPTIONAL
}
Hash ::= OCTET STRING -- SHA1 hash of entire certificate
IssuerSerial ::= SEQUENCE {
issuer GeneralNames,
serialNumber CertificateSerialNumber
}
*/
type SignerCertificate struct {
SigningCertificate SigningCertificate `asn1:"sequence"`
}
type SigningCertificate struct {
ESSCertID ESSCertID `asn1:"sequence"`
IssuerAndSerial issuerAndSerial `asn1:"optional"`
}
type ESSCertID struct {
Hash []byte `asn1:"explicit,tag:16"`
}
При добавление атрибута функция отрабатывает успешно, но при проверке не парсится сертификат. Вероятно структуру не верно описал ?
h := sha1.New()
h.Write(cert.Raw)
b := h.Sum(nil)
ias, err := cert2issuerAndSerial(cert)
if err != nil {
return err
}
ss := SignerCertificate{
SigningCertificate: SigningCertificate{
ESSCertID: ESSCertID{
Hash: b},
IssuerAndSerial: ias},
}
attrs.Add(oidAttributeContentType, sd.sd.ContentInfo.ContentType)
attrs.Add(oidAttributeMessageDigest, sd.messageDigest)
attrs.Add(oidAttributeSigningTime, time.Now().UTC())
attrs.Add(oidSigningCert, ss) // если убрать то сертификат распознаётся
```