コード例 #1
0
        public static PBCertificate SignCertificate(string name, PBKeyPair masterKeyPair, PBKeyPair keyPair)
        {
            var dsa = new CryptoEngine().ECLoad(masterKeyPair.PublicKey.PublicKey, masterKeyPair.PrivateKey);

            var cert = new PBCertificate
            {
                Name      = name,
                PublicKey = keyPair.PublicKey.PublicKey
            };

            /* Issue certificate Id */
            cert.Id = masterKeyPair.IssuedCerts++;

            if (cert.Id > masterKeyPair.IssuedCerts)
            {
                throw new OverflowException("Ran out of issueable certificates");
            }

            /* Prepare sign buffer */
            var pubKey = keyPair.PublicKey.PublicKey.ToByteArray();

            byte[] signBuff = new byte[pubKey.Length + sizeof(int)];

            pubKey.CopyTo(signBuff, 0);
            for (int i = 0; i < sizeof(int); ++i)
            {
                signBuff[pubKey.Length + i] = (byte)((cert.Id >> (8 * i)) & 0xff);
            }

            var byteCert = dsa.SignData(signBuff, HashAlgorithmName.SHA256);

            cert.Signature = ByteString.CopyFrom(byteCert, 0, byteCert.Length);


            return(cert);
        }
コード例 #2
0
 public ECDsaCng verifyCertificate(PBCertificate cert)
 {
     return(this.verifyCertificate(cert.PublicKey.ToByteArray(), cert.Id, cert.Signature.ToByteArray()));
 }