示例#1
0
        public Principal(string name, int generator, int modulus)
        {
            Console.WriteLine($"Creating principal {name}...");
            Name      = name;
            Generator = generator;
            Modulus   = modulus;

            _secret       = PrimeGenerator.GetPrime();
            SecretMessage = SquareAndMultiply.Calculate(Generator, _secret, Modulus);

            Console.WriteLine($"{Name} has selected a secret: {_secret}");
            Console.WriteLine($"{Name} calculated its secret message ({Generator}^{_secret}) mod {modulus}: {SecretMessage}");

            rsa         = new RSACryptoServiceProvider(2048);
            _publicKey  = rsa.ExportParameters(false);
            _privateKey = rsa.ExportParameters(true);

            Console.WriteLine($"{Name} created 2048 bit RSA public and private keys");

            RSAPublicKeyStore.AddPublicKey(Name, _publicKey);

            _secretMessages       = new Dictionary <string, int>();
            _symmetricKeys        = new Dictionary <string, string>();
            _authorizedPrincipals = new HashSet <string>();

            Console.WriteLine($"Principal {Name} has been created successfully.\r\n");
        }
示例#2
0
        public void ReceiveSecretMessage(string principalName, int secretMessage)
        {
            Console.WriteLine($"{Name} received a secret message from {principalName}: {secretMessage}");
            _secretMessages[principalName] = secretMessage;

            int symmetricKey = SquareAndMultiply.Calculate(secretMessage, _secret, Modulus);

            _symmetricKeys[principalName] = symmetricKey.ToString();

            Console.WriteLine($"{Name} calculated symmetric key K = ({secretMessage}^{_secret}) mod {Modulus}: {symmetricKey}");
        }
示例#3
0
 public long Verify(long signedMessage, long E, long N)
 {
     return(SquareAndMultiply.Calculate(signedMessage, E, N));
 }
示例#4
0
 public long Sign(long message)
 {
     return(SquareAndMultiply.Calculate(message, _d, N));
 }