public Certificate(Stream s) { BinaryReader bR = new BinaryReader(s); if (Encoding.ASCII.GetString(bR.ReadBytes(2)) != "CE") { throw new InvalidCertificateException("Invalid certificate format."); } _version = bR.ReadByte(); switch (_version) { case 1: _type = (CertificateType)bR.ReadByte(); _serialNumber = Encoding.ASCII.GetString(bR.ReadBytes(bR.ReadByte())); _issuedTo = new CertificateProfile(s); _capability = (CertificateCapability)bR.ReadByte(); _issuedOnUTC = bR.ReadUInt64(); _expiresOnUTC = bR.ReadUInt64(); _publicKeyEncryptionAlgorithm = (AsymmetricEncryptionAlgorithm)bR.ReadByte(); _publicKeyXML = Encoding.ASCII.GetString(bR.ReadBytes(bR.ReadUInt16())); byte rUriLen = bR.ReadByte(); if (rUriLen > 0) { _revocationUri = new Uri(Encoding.UTF8.GetString(bR.ReadBytes(rUriLen))); } if (s.ReadByte() == 1) { _issuerSignature = new Signature(s); } break; default: throw new InvalidCertificateException("Certificate format version not supported."); } }
public Certificate(CertificateType type, string serialNumber, CertificateProfile issuedTo, CertificateCapability capability, DateTime issuedOnUTC, DateTime expiresOnUTC, AsymmetricEncryptionAlgorithm publicKeyEncryptionAlgorithm, string publicKeyXML) { if (issuedOnUTC > expiresOnUTC) { throw new CryptoException("Invalid issue or expiry date. Issue date is greater than expiry date."); } _version = 1; _type = type; _serialNumber = serialNumber; _issuedTo = issuedTo; _capability = capability; _issuedOnUTC = Convert.ToUInt64((issuedOnUTC - _epoch).TotalSeconds); _expiresOnUTC = Convert.ToUInt64((expiresOnUTC - _epoch).TotalSeconds); _publicKeyEncryptionAlgorithm = publicKeyEncryptionAlgorithm; _publicKeyXML = publicKeyXML; }