Codeunit 1448 DSACryptoServiceProvider Impl. in 28
- App
- System Application
- Namespace
- System.Security.Encryption
Versions171819202122232425262728latest
Source in 28
src/System Application/App/Cryptography Management/src/DSACryptoServiceProviderImpl.Codeunit.al155 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace System.Security.Encryption;
using System;
codeunit 1448 "DSACryptoServiceProvider Impl." implements "Signature Algorithm v2"
{
Access = Internal;
InherentEntitlements = X;
InherentPermissions = X;
var
[NonDebuggable]
DotNetDSACryptoServiceProvider: DotNet DSACryptoServiceProvider;
[NonDebuggable]
procedure GetInstance(var DotNetAsymmetricAlgorithm: DotNet AsymmetricAlgorithm)
begin
DotNetAsymmetricAlgorithm := DotNetDSACryptoServiceProvider;
end;
#region SignData
[NonDebuggable]
procedure SignData(XmlString: SecretText; DataInStream: InStream; HashAlgorithm: Enum "Hash Algorithm"; SignatureOutStream: OutStream)
begin
FromXmlString(XmlString.Unwrap());
SignData(DataInStream, HashAlgorithm, SignatureOutStream);
end;
procedure SignData(DataInStream: InStream; HashAlgorithm: Enum "Hash Algorithm"; SignatureOutStream: OutStream)
var
Bytes: DotNet Array;
Signature: DotNet Array;
begin
if DataInStream.EOS() then
exit;
InStreamToArray(DataInStream, Bytes);
SignData(Bytes, HashAlgorithm, Signature);
ArrayToOutStream(Signature, SignatureOutStream);
end;
local procedure SignData(Bytes: DotNet Array; HashAlgorithm: Enum "Hash Algorithm"; var Signature: DotNet Array)
begin
if Bytes.Length() = 0 then
exit;
TrySignData(Bytes, HashAlgorithm, Signature);
end;
[TryFunction]
local procedure TrySignData(Bytes: DotNet Array; HashAlgorithm: Enum "Hash Algorithm"; var Signature: DotNet Array)
var
DotNetHashAlgorithmName: DotNet HashAlgorithmName;
begin
DotNetHashAlgorithmName := DotNetHashAlgorithmName.HashAlgorithmName(Format(HashAlgorithm));
Signature := DotNetDSACryptoServiceProvider.SignData(Bytes, DotNetHashAlgorithmName);
end;
#endregion
#region VerifyData
[NonDebuggable]
procedure VerifyData(XmlString: SecretText; DataInStream: InStream; HashAlgorithm: Enum "Hash Algorithm"; SignatureInStream: InStream): Boolean
begin
FromXmlString(XmlString.Unwrap());
VerifyData(DataInStream, HashAlgorithm, SignatureInStream);
end;
procedure VerifyData(DataInStream: InStream; HashAlgorithm: Enum "Hash Algorithm"; SignatureInStream: InStream): Boolean
var
Bytes: DotNet Array;
Signature: DotNet Array;
begin
if DataInStream.EOS() or SignatureInStream.EOS() then
exit(false);
InStreamToArray(DataInStream, Bytes);
InStreamToArray(SignatureInStream, Signature);
exit(VerifyData(Bytes, HashAlgorithm, Signature));
end;
local procedure VerifyData(Bytes: DotNet Array; HashAlgorithm: Enum "Hash Algorithm"; Signature: DotNet Array): Boolean
var
Verified: Boolean;
begin
if Bytes.Length() = 0 then
exit(false);
Verified := TryVerifyData(Bytes, HashAlgorithm, Signature);
if not Verified and (GetLastErrorText() <> '') then
Error(GetLastErrorText());
exit(Verified);
end;
[TryFunction]
local procedure TryVerifyData(Bytes: DotNet Array; HashAlgorithm: Enum "Hash Algorithm"; Signature: DotNet Array)
var
DotNetHashAlgorithmName: DotNet HashAlgorithmName;
begin
DotNetHashAlgorithmName := DotNetHashAlgorithmName.HashAlgorithmName(Format(HashAlgorithm));
if not DotNetDSACryptoServiceProvider.VerifyData(Bytes, Signature, DotNetHashAlgorithmName) then
Error('');
end;
#endregion
#region XmlString
[NonDebuggable]
procedure FromXmlString(XmlString: Text)
begin
DSACryptoServiceProvider();
DotNetDSACryptoServiceProvider.FromXmlString(XmlString);
end;
[NonDebuggable]
procedure ToXmlString(IncludePrivateParameters: Boolean): Text
begin
exit(DotNetDSACryptoServiceProvider.ToXmlString(IncludePrivateParameters));
end;
[NonDebuggable]
procedure FromSecretXmlString(XmlString: SecretText)
begin
DSACryptoServiceProvider();
DotNetDSACryptoServiceProvider.FromXmlString(XmlString.Unwrap());
end;
procedure ToSecretXmlString(IncludePrivateParameters: Boolean): SecretText
begin
exit(DotNetDSACryptoServiceProvider.ToXmlString(IncludePrivateParameters));
end;
#endregion
[NonDebuggable]
local procedure DSACryptoServiceProvider()
begin
DotNetDSACryptoServiceProvider := DotNetDSACryptoServiceProvider.DSACryptoServiceProvider();
end;
local procedure ArrayToOutStream(Bytes: DotNet Array; OutputOutStream: OutStream)
var
DotNetMemoryStream: DotNet MemoryStream;
begin
DotNetMemoryStream := DotNetMemoryStream.MemoryStream(Bytes);
CopyStream(OutputOutStream, DotNetMemoryStream);
end;
local procedure InStreamToArray(InputInStream: InStream; var Bytes: DotNet Array)
var
DotNetMemoryStream: DotNet MemoryStream;
begin
DotNetMemoryStream := DotNetMemoryStream.MemoryStream();
CopyStream(DotNetMemoryStream, InputInStream);
Bytes := DotNetMemoryStream.ToArray();
end;
}Procedures, 9
| Name | Parameters | Returns | Access | Obsolete |
|---|---|---|---|---|
| GetInstance | (var DotNet AsymmetricAlgorithm) | public | - | |
| SignData | (InStream, Enum Hash Algorithm, OutStream) | public | - | |
| VerifyData | (InStream, Enum Hash Algorithm, InStream) | Boolean | public | - |
| FromXmlString | (Text) | public | - | |
| ToXmlString | (Boolean) | Text | public | - |
| SignData | (SecretText, InStream, Enum Hash Algorithm, OutStream) | public | - | |
| VerifyData | (SecretText, InStream, Enum Hash Algorithm, InStream) | Boolean | public | - |
| FromSecretXmlString | (SecretText) | public | - | |
| ToSecretXmlString | (Boolean) | SecretText | public | - |