/// <summary> /// Process request. /// </summary> /// <returns>Response message.</returns> public override StreamResponse ConstructResponse() { var mr = new StreamResponse(); KeyTypeCode ktc = null; if (!ValidateKeyTypeCode(_keyType, mr, ref ktc)) { return(mr); } var zmkKs = KeyScheme.Unspecified; if (!ValidateKeySchemeCode(_zmkScheme, mr, ref zmkKs)) { return(mr); } if (!ValidateAuthStateRequirement(KeyFunction.Export, ktc.Pair, ktc.Variant, mr)) { return(mr); } var zmk = new HexKeyThales(new KeyTypeCode(0, LmkPair.Pair04_05), false, _zmk); if (!zmk.ClearKey.IsParityOk(Parity.Odd)) { mr.Append(ErrorCodes.ER_10_SOURCE_KEY_PARITY_ERROR); return(mr); } var key = new HexKeyThales(ktc, false, _key); if (!key.ClearKey.IsParityOk(Parity.Odd)) { mr.Append(ErrorCodes.ER_11_DESTINATION_KEY_PARITY_ERROR); return(mr); } var cryptKey = zmk.EncryptWithScheme(zmkKs.GetKeySchemeChar() + key.ClearKey); Log.InfoFormat("ZMK (clear): {0}", zmk.ClearKey); Log.InfoFormat("Key (clear): {0}", key.ClearKey); Log.InfoFormat("Key (ZMK): {0}", cryptKey); Log.InfoFormat("Check value: {0}", key.CheckValue); mr.Append(ErrorCodes.ER_00_NO_ERROR); mr.Append(zmkKs != KeyScheme.Unspecified && zmkKs != KeyScheme.SingleLengthKey ? zmkKs.GetKeySchemeChar() : string.Empty); mr.Append(cryptKey); mr.Append(key.CheckValue.Substring(0, 6)); return(mr); }
/// <summary> /// Process request. /// </summary> /// <returns>Response message.</returns> public override StreamResponse ConstructResponse() { var mr = new StreamResponse(); KeyTypeCode ktc = null; if (!ValidateKeyTypeCode(_keyType, mr, ref ktc)) { return(mr); } var ks = KeyScheme.Unspecified; if (!ValidateKeySchemeCode(_keyScheme, mr, ref ks)) { return(mr); } var zmkKs = KeyScheme.Unspecified; if (!string.IsNullOrEmpty(_zmkScheme)) { if (!ValidateKeySchemeCode(_zmkScheme, mr, ref zmkKs)) { return(mr); } } if (!ValidateAuthStateRequirement(KeyFunction.Generate, ktc.Pair, ktc.Variant, mr)) { return(mr); } var rndKey = string.Empty.RandomKey(ks); var thalesRndKey = new HexKeyThales(ktc, true, rndKey); Log.InfoFormat("Key generated (clear): {0}", rndKey); Log.InfoFormat("Key generated (LMK, ANSI): {0}", thalesRndKey.KeyAnsi); Log.InfoFormat("Key generated (LMK, Variant): {0}", thalesRndKey.KeyVariant); Log.InfoFormat("Check value: {0}", thalesRndKey.CheckValue); mr.Append(ErrorCodes.ER_00_NO_ERROR); mr.Append(ks == KeyScheme.DoubleLengthKeyAnsi || ks == KeyScheme.TripleLengthKeyAnsi ? thalesRndKey.KeyAnsi : thalesRndKey.KeyVariant); if (!string.IsNullOrEmpty(_zmk) && _modeFlag == "1") { var zmk = new HexKeyThales(new KeyTypeCode(0, LmkPair.Pair04_05), false, _zmk); if (!zmk.ClearKey.IsParityOk(Parity.Odd)) { mr.Append(ErrorCodes.ER_10_SOURCE_KEY_PARITY_ERROR); return(mr); } var cryptUnderZmk = zmk.EncryptWithScheme(zmkKs.GetKeySchemeChar() + rndKey); Log.InfoFormat("ZMK (clear): {0}", zmk.ClearKey); Log.InfoFormat("Key under ZMK: {0}", zmkKs.GetKeySchemeChar() + cryptUnderZmk); mr.Append(zmkKs.GetKeySchemeChar() + cryptUnderZmk); } mr.Append(thalesRndKey.CheckValue.Substring(0, 6)); return(mr); }