public ActionResult <EncAnswerItem> GetEncAnswer() { var answer = new EncAnswerItem { Prime = _base64Prime.ToString(), Factor1 = _base64Factor1.ToString(), Factor2 = _base64Factor2.ToString(), PublicKey = _publicKey.ToString(), SecretKey = _secretKey.ToString() }; return(answer); }
private static void PrintAnswer(EncAnswerItem answer) { Console.WriteLine(string.Empty); Console.WriteLine("********* Factors *********"); //Console.WriteLine($"Factor1:{answer.Factor1}"); //Console.WriteLine($"Factor2:{answer.Factor2}"); Console.WriteLine(string.Empty); var context = SEALUtils.GetContext(); var ciphertextPrime = SEALUtils.BuildCiphertextFromBase64String(answer.Prime, context); var ciphertextFactor1 = SEALUtils.BuildCiphertextFromBase64String(answer.Factor1, context); var ciphertextFactor2 = SEALUtils.BuildCiphertextFromBase64String(answer.Factor2, context); var publicKey = SEALUtils.BuildPublicKeyFromBase64String(answer.PublicKey, context); var secretKey = SEALUtils.BuildSecretKeyFromBase64String(answer.SecretKey, context); Ciphertext temp = new Ciphertext(); Evaluator _evaluator = new Evaluator(context); Encryptor encryptor = new Encryptor(context, publicKey); _evaluator.Multiply(ciphertextFactor1, ciphertextFactor2, temp); var tempstring = SEALUtils.CiphertextToBase64String(temp); if (tempstring.Equals(answer.Prime)) { Console.WriteLine("the answer is right!"); } else { var plain = new Plaintext(); Console.WriteLine("the answer is wrong"); Decryptor _decryptor = new Decryptor(context, secretKey); _decryptor.Decrypt(ciphertextPrime, plain); PrintAnswer(plain.ToString()); encryptor.Encrypt(plain, temp); if (!SEALUtils.CiphertextToBase64String(temp).Equals(SEALUtils.CiphertextToBase64String(ciphertextPrime))) { Console.WriteLine(SEALUtils.CiphertextToBase64String(ciphertextFactor2).Substring(0, 100)); Console.WriteLine(SEALUtils.CiphertextToBase64String(ciphertextFactor1).Substring(0, 100)); } Console.WriteLine(_decryptor.InvariantNoiseBudget(temp)); _decryptor.Decrypt(temp, plain); PrintAnswer(plain.ToString()); //_decryptor.Decrypt(ciphertextFactor1, plain); //PrintAnswer(plain.ToString()); //_decryptor.Decrypt(ciphertextFactor2, plain); //PrintAnswer(plain.ToString()); } }