Beispiel #1
0
        public override int Encode()
        {
            int len = 0;

            // modulus needs an extra byte at the beginning to signify it's a positive value - so will be 257 bytes long instead of 256
            len += modulus.Encode();
            len += exponent.Encode();

            byte[] lengthBytes = EncodeLength(len);

            derValue    = new byte[1 + lengthBytes.Length + len];
            derValue[0] = 0x30;

            int pos = 1;

            Array.Copy(lengthBytes, 0, derValue, pos, lengthBytes.Length);
            pos += lengthBytes.Length;

            Array.Copy(modulus.derValue, 0, derValue, pos, modulus.derValue.Length);
            pos += modulus.derValue.Length;

            Array.Copy(exponent.derValue, 0, derValue, pos, exponent.derValue.Length);
            pos += exponent.derValue.Length;

            PrependContextTag();

            return(derValue.Length);
        }
Beispiel #2
0
        public override int Encode()
        {
            int len = 0;

            len += version.Encode();
            len += modulus.Encode();
            len += exponent.Encode();
            len += privateExponent.Encode();
            len += prime1.Encode();
            len += prime2.Encode();
            len += exp1.Encode();
            len += exp2.Encode();
            len += coefficient.Encode();

            byte[] lengthBytes = EncodeLength(len);

            derValue    = new byte[1 + lengthBytes.Length + len];
            derValue[0] = 0x30;
            int d = 1;

            Array.Copy(lengthBytes, 0, derValue, d, lengthBytes.Length);
            d += lengthBytes.Length;

            Array.Copy(version.derValue, 0, derValue, d, version.derValue.Length);
            d += version.derValue.Length;
            Array.Copy(modulus.derValue, 0, derValue, d, modulus.derValue.Length);
            d += modulus.derValue.Length;
            Array.Copy(exponent.derValue, 0, derValue, d, exponent.derValue.Length);
            d += exponent.derValue.Length;
            Array.Copy(privateExponent.derValue, 0, derValue, d, privateExponent.derValue.Length);
            d += privateExponent.derValue.Length;
            Array.Copy(prime1.derValue, 0, derValue, d, prime1.derValue.Length);
            d += prime1.derValue.Length;
            Array.Copy(prime2.derValue, 0, derValue, d, prime2.derValue.Length);
            d += prime2.derValue.Length;
            Array.Copy(exp1.derValue, 0, derValue, d, exp1.derValue.Length);
            d += exp1.derValue.Length;
            Array.Copy(exp2.derValue, 0, derValue, d, exp2.derValue.Length);
            d += exp2.derValue.Length;
            Array.Copy(coefficient.derValue, 0, derValue, d, coefficient.derValue.Length);
            d += coefficient.derValue.Length;

            PrependContextTag();

            return(derValue.Length);
        }
        public override int Encode()
        {
            int length           = 0;
            int extensionsLength = 0;

            byte[] extensionsLengthBytes = null;

            int versionLength = version.Encode();

            byte[] versionLengthBytes = EncodeLength(versionLength);
            length += 1 + versionLengthBytes.Length;

            length += versionLength;
            length += serialNumber.Encode();
            length += signature.Encode();
            length += issuer.Encode();
            length += validity.Encode();
            length += subject.Encode();
            length += subjectPKInfo.Encode();

            // optional
            if (issuerUniqueID != null)
            {
                length += 1 + issuerUniqueID.Encode();
            }
            if (subjectUniqueID != null)
            {
                length += 1 + subjectUniqueID.Encode();
            }
            if (extensions != null)
            {
                extensionsLength      = extensions.Encode();
                extensionsLengthBytes = EncodeLength(extensionsLength);
                length += 1 + extensionsLengthBytes.Length + extensionsLength;
            }

            byte[] lengthBytes = EncodeLength(length);
            derValue = new byte[1 + lengthBytes.Length + length];

            int d = 0;

            derValue[d] = 0x30; // sequence
            d++;

            Array.Copy(lengthBytes, 0, derValue, d, lengthBytes.Length);
            d += lengthBytes.Length;

            derValue[d] = 0xa0; // explicit tag
            d++;
            Array.Copy(versionLengthBytes, 0, derValue, d, versionLengthBytes.Length);
            d += versionLengthBytes.Length;

            Array.Copy(version.derValue, 0, derValue, d, version.derValue.Length);
            d += version.derValue.Length;
            Array.Copy(serialNumber.derValue, 0, derValue, d, serialNumber.derValue.Length);
            d += serialNumber.derValue.Length;
            Array.Copy(signature.derValue, 0, derValue, d, signature.derValue.Length);
            d += signature.derValue.Length;
            Array.Copy(issuer.derValue, 0, derValue, d, issuer.derValue.Length);
            d += issuer.derValue.Length;
            Array.Copy(validity.derValue, 0, derValue, d, validity.derValue.Length);
            d += validity.derValue.Length;
            Array.Copy(subject.derValue, 0, derValue, d, subject.derValue.Length);
            d += subject.derValue.Length;
            Array.Copy(subjectPKInfo.derValue, 0, derValue, d, subjectPKInfo.derValue.Length);
            d += subjectPKInfo.derValue.Length;

            if (issuerUniqueID != null)
            {
                derValue[d] = 0xa1;
                d++;

                Array.Copy(issuerUniqueID.derValue, 0, derValue, d, issuerUniqueID.derValue.Length);
                d += issuerUniqueID.derValue.Length;
            }
            if (subjectUniqueID != null)
            {
                derValue[d] = 0xa2;
                d++;

                Array.Copy(subjectUniqueID.derValue, 0, derValue, d, subjectUniqueID.derValue.Length);
                d += subjectUniqueID.derValue.Length;
            }
            if (extensions != null)
            {
                derValue[d] = 0xa3;
                d++;

                Array.Copy(extensionsLengthBytes, 0, derValue, d, extensionsLengthBytes.Length);
                d += extensionsLengthBytes.Length;

                Array.Copy(extensions.derValue, 0, derValue, d, extensions.derValue.Length);
                d += extensions.derValue.Length;
            }

            PrependContextTag();

            return(derValue.Length);
        }