예제 #1
0
        public static String Format(this PublicKey publicKey)
        {
            StringBuilder sb = new StringBuilder();
            String        keyParamsString = "";

            switch (publicKey.Oid.Value)
            {
            case AlgorithmOids.ECC:
                keyParamsString = AsnFormatter
                                  .BinaryToString(publicKey.EncodedParameters.RawData, EncodingType.HexAddress)
                                  .TrimEnd();
                keyParamsString += $"\r\n        {new Asn1ObjectIdentifier(publicKey.EncodedParameters.RawData).Value.Format(true)}";
                break;

            case AlgorithmOids.RSA:
                keyParamsString = AsnFormatter.BinaryToString(Asn1Utils.EncodeNull(), EncodingType.Hex);
                break;

            default:
                keyParamsString = AsnFormatter
                                  .BinaryToString(publicKey.EncodedParameters.RawData, EncodingType.HexAddress)
                                  .Replace("\r\n", "\r\n    ")
                                  .TrimEnd();
                break;
            }
            String keyValueString = AsnFormatter
                                    .BinaryToString(publicKey.EncodedKeyValue.RawData, EncodingType.HexAddress)
                                    .Replace("\r\n", "\r\n    ")
                                    .TrimEnd();

            sb.Append(
                $@"Public Key Algorithm:
    Algorithm ObjectId: {publicKey.Oid.FriendlyName} ({publicKey.Oid.Value})
    Algorithm Parameters:
    {keyParamsString}
Public Key Length: {publicKey.GetKeyLength()} bits
Public Key: UnusedBits = 0
    {keyValueString}
");
            return(sb.ToString());
        }