CryptoSys PKI Pro Manual

PAD_HexBlock

Creates a hex-encoded input block suitably padded for encryption by a block cipher in ECB or CBC mode.

VBA/VB6 Syntax

Public Declare Function PAD_HexBlock Lib "diCrPKI.dll" (ByVal strOutput As String, ByVal nMaxChars As Long, ByVal strInputHex As String, ByVal nBlockLen As Long, ByVal nOptions As Long) As Long

nRet = PAD_HexBlock(strOutput, nMaxChars, strInput, nBlockLen, nOptions)

C/C++ Syntax

long __stdcall PAD_HexBlock(char *szOutput, long nOutChars, const char *szInput, long nBlkLen, long nOptions);

Parameters

szOutput
[out] to receive the hexadecimal-encoded padded encryption block.
nOutChars
[in] specifying the maximum number of characters in szOutput.
szInput
[in] containing the hexadecimal-encoded data to be padded.
nBlkLen
[in] specifying the cipher block length in bytes (8 or 16).
nOptions
[in] option flags. Select one of:
PKI_PAD_DEFAULT (0) to use the default PKCS5 padding
PKI_PAD_PKCS5 to use Pkcs5Padding (same as default)
PKI_PAD_1ZERO to use OneAndZeroesPadding
PKI_PAD_AX923 to use the padding scheme described in ANSI X9.23
PKI_PAD_W3C to use the padding scheme described in W3C <https://www.w3.org/TR/xmlenc-core1/#sec-Padding>

Returns (VBA/C)

If successful, the return value is the number of characters in or required for the output string; otherwise it returns a negative error code.

VBA Wrapper Syntax

Public Function padHexBlock (szInput As String, nBlkLen As Long, Optional nOptions As Long = 0) As String

.NET Equivalent

Use the method associated with the relevant encryption algorithm class:

Cipher.Pad Method (String, CipherAlgorithm, Padding)

Python Equivalent

static Cipher.pad_hex(datahex, alg, pad=Pad.PKCS5)

Remarks

For the "raw" VBA/C function, the user must allocate an output string buffer szOutput of the required length. Specify a zero nOutChars or an empty string for szOutput to find the required length. ANSI C users must add one to this value when allocating memory.

The output will be padded according to the convention specified in nOptions. The output is always longer than the input. Only block lengths of 8 or 16 bytes are supported.

Example (VBA core function)

Dim strInputHex As String
Dim strOutputHex As String
Dim nOutChars As Long
Dim nBlockLen As Long
Dim i As Long

' Prepare test input 5 bytes long
strInputHex = "FFFFFFFFFF"
Debug.Print "Input data='" & strInputHex & "'"

' Find out the required number of characters in output
nBlockLen = 8   ' NB block length is in bytes
nOutChars = PAD_HexBlock("", 0, strInputHex, nBlockLen, 0)
Debug.Print "Required length is " & nOutChars & " characters"
' Check for error
If (nOutChars <= 0) Then Exit Function

' Pre-dimension output
strOutputHex = String(nOutChars, " ")

nOutChars = PAD_HexBlock(strOutputHex, Len(strOutputHex), strInputHex, nBlockLen, 0)
Debug.Print "Padded data='" & strOutputHex & "'"

' Now set input as padded output and remove padding
strInputHex = strOutputHex

' Remove padding...
' No need to query for length because we know the output will be shorter than input
' so make sure output is as long as the input
strOutputHex = String(Len(strInputHex), " ")
nOutChars = PAD_UnpadHex(strOutputHex, Len(strOutputHex), strInputHex, nBlockLen, 0)
Debug.Print "Unpadded length is " & nOutChars & " characters"
' Check for error
If (nOutChars <= 0) Then Exit Function

' Re-dimension the output to the correct length
strOutputHex = Left$(strOutputHex, nOutChars)
Debug.Print "Unpadded data='" & strOutputHex & "'"

This should result in output as follows:

Input data='FFFFFFFFFF'
Required length is 16 characters
Padded data='FFFFFFFFFF030303'
Unpadded length is 10 characters
Unpadded data='FFFFFFFFFF'

Example (VBA wrapper function)

Dim strInputHex As String
Dim strOutputHex As String
strInputHex = "FDFDFD"
Debug.Print "Hex input  =" & strInputHex

strOutputHex = padHexBlock(strInputHex, 8, 0)
Debug.Print "Padded data=" & strOutputHex
Debug.Print "Unpadded   =" & padUnpadHex(strOutputHex, 8, 0)

strOutputHex = padHexBlock(strInputHex, 8, PKI_PAD_1ZERO)
Debug.Print "Padded data=" & strOutputHex
Debug.Print "Unpadded   =" & padUnpadHex(strOutputHex, 8, PKI_PAD_1ZERO)

strOutputHex = padHexBlock(strInputHex, 8, PKI_PAD_AX923)
Debug.Print "Padded data=" & strOutputHex
Debug.Print "Unpadded   =" & padUnpadHex(strOutputHex, 8, PKI_PAD_AX923)

See Also

PAD_UnpadHex PAD_BytesBlock PAD_UnpadBytes

[Contents] [Index]

[PREV: PAD_BytesBlock...]   [Contents]   [Index]   
   [NEXT: PAD_UnpadBytes...]

Copyright © 2004-24 D.I. Management Services Pty Ltd. All rights reserved. Generated 2024-09-23T07:52:09Z.