public static tbl_PrivateKey CreatePrivKey(IConfiguration conf, IUnitOfWork uow, tbl_User user, SshHostKeyAlgorithm keyAlgo, int privKeySize, string privKeyPass, SignatureHashAlgorithm sigAlgo, string comment) { var callPath = $"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}"; var privId = Guid.NewGuid(); var pubId = Guid.NewGuid(); var privStream = new MemoryStream(); var pubStream = new MemoryStream(); var keyPair = SshPrivateKey.Generate(keyAlgo, privKeySize); keyPair.Save(privStream, privKeyPass, SshPrivateKeyFormat.Pkcs8); keyPair.SavePublicKey(pubStream, SshPublicKeyFormat.Pkcs8); var privKey = uow.PrivateKeys.Create( new tbl_PrivateKey { Id = privId, PublicKeyId = pubId, IdentityId = user.IdentityId, KeyValue = Encoding.ASCII.GetString(privStream.ToArray()), KeyAlgo = keyPair.KeyAlgorithm.ToString(), KeyPass = AES.EncryptString(privKeyPass, conf["Databases:AuroraSecret"]), KeyFormat = SshPrivateKeyFormat.Pkcs8.ToString(), Enabled = true, Deletable = true, Created = DateTime.Now, LastUpdated = null, }); Log.Information($"'{callPath}' '{user.IdentityAlias}' private key algo {keyPair.KeyAlgorithm} sig {keyPair.Fingerprint.ToString(sigAlgo, false)}" + $"{Environment.NewLine}{privKey.KeyValue}"); var pubKey = uow.PublicKeys.Create( new tbl_PublicKey { Id = pubId, PrivateKeyId = privId, IdentityId = user.IdentityId, KeyValue = Encoding.ASCII.GetString(pubStream.ToArray()), KeyAlgo = keyPair.KeyAlgorithm.ToString(), KeyFormat = SshPublicKeyFormat.Pkcs8.ToString(), SigValue = keyPair.Fingerprint.ToString(sigAlgo, false), SigAlgo = sigAlgo.ToString(), Comment = comment, Enabled = true, Deletable = true, Created = DateTime.Now, LastUpdated = null, }); Log.Information($"'{callPath}' '{user.IdentityAlias}' public key algo {keyPair.KeyAlgorithm} sig {keyPair.Fingerprint.ToString(sigAlgo, false)}" + $"{Environment.NewLine}{pubKey.KeyValue}"); uow.Commit(); return(privKey); }
public static void CheckPrivKey(IConfiguration conf, IUnitOfWork uow, SshHostKeyAlgorithm keyAlgo, int privKeySize, string privKeyPass, SignatureHashAlgorithm sigAlgo) { var keyAlgoStr = keyAlgo.ToString(); var privKey = uow.PrivateKeys.Get(QueryExpressionFactory.GetQueryExpression <tbl_PrivateKey>() .Where(x => x.KeyAlgo == keyAlgoStr && x.IdentityId == null && x.Deletable == false).ToLambda()) .SingleOrDefault(); if (privKey == null) { CreatePrivKey(conf, uow, keyAlgo, privKeySize, privKeyPass, sigAlgo); } }