Oracle DBMS_CRYPTO_TOOLKIT Built-In Package
Versions 10.1 - 19.4

Security Advisory
Types and subroutines supporting the DBMS_CRYPTO built in encryption package and Wallets and Transparent Data Encryption.

According to the source file header:
--- Old dbms_crypto_TOOLKIT code.
--- The code below was desupported and should not be documented.
--- Final disposition on the removal of this package is pending.
--- December 12, 2002


Apparently someone forgot about this sometime during the preceding 16 years. The script was last altered, according to the header, in 2014 ... 12 years after it was "desupported".

Reference to the package here at in the DBSecWorx code library is intended solely as a warning that there is no known legitimate reason for anyone to have access to this security package.
 
Recommended Security Rules

 NEVER
  • Grant execute on this package to any user or role
 WITH GREAT CARE
  • Check regularly to determine if execute on this package has been granted and if so treat it as highly suspicious: It should raise alarms.
 CAUTIONS
  • N/A
 
How Oracle Works
N/A N/A
 
DBMS_CRYPTO_TOOLKIT Package Information
AUTHID DEFINER
Constants
Name Data Type Value
DETACHEDSIGNATURE Crypto_Engine_Function 1
SIGNATURE Crypto_Engine_Function 2
ENVELOPING Crypto_Engine_Function 3
PKENCRYPTION Crypto_Engine_Function 4
ENCRYPTION Crypto_Engine_Function 5
KEYEDHASH_CHECKSUM Crypto_Engine_Function 6
HASH_CHECKSUM Crypto_Engine_Function 7
RANDOM Crypto_Engine_Function 8
 
CONTINUE_PROCESSING Crypto_Engine_State 1
END_PROCESSING Crypto_Engine_State 2
RESET_PROCESSING Crypto_Engine_State 3
 
X509V1 Identity_Type 1
SYMMETRIC Identity_Type 2
 
RSA Cipher 1
DES Cipher 2
RC4 Cipher 3
MD5DES Cipher 4
MD5RC2 Cipher 5
MD5 Cipher 6
SHA Cipher 7
 
PKCS7 Data_Unit_Format 1
RSAPAD Data_Unit_Format 2
ORACLEv1 Data_Unit_Format 3
Data Types SUBTYPE Crypto_Engine_Function IS dbms_crypto_toolkit_types.Crypto_Engine_Function;
SUBTYPE Crypto_Engine_State IS dbms_crypto_toolkit_types.Crypto_Engine_State;
SUBTYPE Identity_Type IS dbms_crypto_toolkit_types.Identity_Type;
SUBTYPE Cipher IS dbms_crypto_toolkit_types.Cipher;
SUBTYPE Data_Unit_Format IS dbms_crypto_toolkit_types.Data_Unit_Format;

-- Aliases to reduce typing.
SUBTYPE Wallet IS dbms_crypto_toolkit_types.Wallet;
SUBTYPE Persona IS dbms_crypto_toolkit_types.Persona;
SUBTYPE Identity IS dbms_crypto_toolkit_types.Identity;
SUBTYPE Identity_Array IS dbms_crypto_toolkit_types.Identity_Array;
SUBTYPE Alias_String IS dbms_crypto_toolkit_types.Alias_String;
SUBTYPE Comment_String IS dbms_crypto_toolkit_types.Comment_String;
SUBTYPE Identity_Description IS dbms_crypto_toolkit_types.Identity_Description;
SUBTYPE Identity_Description_List IS dbms_crypto_toolkit_types.Identity_Description_List;
SUBTYPE Persona_Description IS dbms_crypto_toolkit_types.Persona_Description;
SUBTYPE Persona_List IS dbms_crypto_toolkit_types.Persona_List;
SUBTYPE Private_Persona_Information IS dbms_crypto_toolkit_types.Private_Persona_Information;
Dependencies
DBMS_CRYPTO_TOOLKIT_FFI DBMS_CRYPTO_TOOLKIT_TYPES UTL_RAW
Documented in Types & Packages No
Exceptions
Error Code Reason
ORA-28836 package_wallet_is_not_open
ORA-28840 package_wallet_is_open
First Available 10.1.0.3
Security Model Owned by SYS with EXECUTE granted to PUBLIC
Source {ORACLE_HOME}/rdbms/admin/dbmsoctk.sql
Subprograms
 
ABORTIDENTITY
Aborts an identity dbms_crypto_toolkit.abortIdentity(identity IN OUT Identity);
TBD
 
CLOSEPERSONA
Closes a persona within a wallet dbms_crypto_toolkit.closePersona(persona IN OUT Persona);
See Demo Below
 
CLOSEWALLET
Closes the identified wallet
Overload 1
dbms_crypto_toolkit.closeWallet(wallet IN OUT Wallet);
TBD
Closes the wallet kept by the package
Overload 2
dbms_crypto_toolkit.closeWallet;
exec dbms_crypto_toolkit.closeWallet;
 
CREATEIDENTITY
Creates an identity dbms_crypto_toolkit.createIdentity(
identitytype       IN  Identity_Type,
public_identity    IN  VARCHAR2,
alias              IN  VARCHAR2,
longer_description IN  VARCHAR2,
trust_qualifier    IN  VARCHAR2,
identity           OUT Identity);
TBD
 
CREATEPERSONA
Creates a persona dbms_crypto_toolkit.createPersona(
cipher_type         IN  Cipher,
private_information IN  Private_Persona_Information,
prl                 IN  VARCHAR2,
alias               IN  VARCHAR2,
longer_description  IN  VARCHAR2,
persona             OUT Persona);
TBD
 
CREATEWALLET
Creates the identified wallet

Overload 1
dbms_crypto_toolkit.createWallet(
password                IN     VARCHAR2,
wallet                  IN OUT Wallet,
wallet_resource_locator IN     VARCHAR2 DEFAULT NULL);
TBD
Used by applications which want to use the wallet kept by the package

Overload 2
dbms_crypto_toolkit.createWallet(
password                IN VARCHAR2,
wallet_resource_locator IN VARCHAR2 DEFAULT NULL);
SQL> BEGIN
  2    dbms_crypto_toolkit.createWallet('oracle1', wallet_resource_locator=>NULL);
  3  END;
  4  /
BEGIN
*
ERROR at line 1:
ORA-28817: PL/SQL function returned an error.
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT_FFI", line 74
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT", line 141
ORA-06512: at line 2
 
DECRYPT
Converts the contents of an encrypted message back into its original readable format

Overload 1
dbms_crypto_toolkit.decrypt(
persona          IN  Persona,
input            IN  RAW,
decrypted_data   OUT RAW,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.decrypt(
persona          IN Persona,
input            IN RAW,
decryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.decrypt(
persona          IN  Persona,
input_string     IN  VARCHAR2,
decrypted_string OUT VARCHAR2,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.decrypt(
persona          IN Persona,
input_string     IN VARCHAR2,
decryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
 
DEENVELOPE
Remove a message from an envelope

Overload 1
dbms_crypto_toolkit.deEnvelope(
persona          IN  Persona,
enveloped_data   IN  RAW,
output_data      OUT RAW,
verified         OUT BOOLEAN,
validated        OUT BOOLEAN,
sender_identity  OUT Identity,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.deEnvelope(
persona          IN  Persona,
enveloped_data   IN  RAW,
verified         OUT BOOLEAN,
validated        OUT BOOLEAN,
sender_identity  OUT Identity,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.deEnvelope(
persona          IN  Persona,
enveloped_string IN  VARCHAR2,
output_string    OUT VARCHAR2,
verified         OUT BOOLEAN,
validated        OUT BOOLEAN,
sender_identity  OUT Identity,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.deEnvelope(
persona          IN  Persona,
enveloped_string IN  VARCHAR2,
verified         OUT BOOLEAN,
validated        OUT BOOLEAN,
sender_identity  OUT Identity,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
 
DESTROYWALLET
Deletes a wallet bases on a given wallet resource locator dbms_crypto_toolkit.destroyWallet(
password                IN VARCHAR2,
wallet_resource_locator IN VARCHAR2 DEFAULT NULL);
TBD
 
ENCRYPT
Disguise the contents of a message and rendering it unreadable

Overload 1
dbms_crypto_toolkit.encrypt(
persona          IN  Persona,
input            IN  RAW,
encrypted_data   OUT RAW,
encryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.encrypt(
persona          IN Persona,
input            IN RAW,
encryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.encrypt(
persona          IN Persona,
input_string     IN VARCHAR2,
encryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
 
ENVELOPE
Digitally signs a message for authentication and encrypting the message with the recipient's public key

Overload 1
dbms_crypto_toolkit.envelope(
persona          IN  Persona,
recipient        IN  Identity,
input            IN  RAW,
enveloped_data   OUT RAW,
encryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.envelope(
persona          IN Persona,
recipient        IN Identity,
input            IN RAW,
encryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.envelope(
persona          IN  Persona,
recipient        IN  Identity,
input_string     IN  VARCHAR2,
enveloped_string OUT VARCHAR2,
encryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.envelope(
persona          IN Persona,
recipient        IN Identity,
input_string     IN VARCHAR2,
encryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
Overload 5 dbms_crypto_toolkit.envelope(
persona              IN  Persona,
number_of_recipients IN  POSITIVE,
recipient_list       IN  Identity_Array,
input                IN  RAW,
enveloped_data       OUT RAW,
encryption_state     IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 6 dbms_crypto_toolkit.envelope(
persona              IN Persona,
number_of_recipients IN POSITIVE,
recipient_list       IN Identity_Array,
input                IN RAW,
encryption_state     IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 7 dbms_crypto_toolkit.envelope(
persona              IN  Persona,
number_of_recipients IN  POSITIVE,
recipient_list       IN  Identity_Array,
input_string         IN  VARCHAR2,
enveloped_string     OUT VARCHAR2,
encryption_state     IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 8 dbms_crypto_toolkit.envelope(
persona              IN Persona,
number_of_recipients IN POSITIVE,
recipient_list       IN Identity_Array,
input_string         IN VARCHAR2,
encryption_state     IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
 
HASH
Generate a hash of the current message

Overload 1
dbms_crypto_toolkit.hash(
persona    IN  Persona,
input      IN  RAW,
hash       OUT RAW,
hash_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.hash(
persona    IN Persona,
input      IN RAW,
hash_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.hash(
persona      IN  Persona,
input_string IN  VARCHAR2,
hash         OUT RAW,
hash_state   IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.hash(
persona      IN Persona,
input_string IN VARCHAR2,
hash_state   IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
 
INITIALIZE
Initialize the toolkit package for use dbms_crypto_toolkit.initialize;
exec dbms_crypto_toolkit.initialize;
 
KEYEDHASH
Generates a public key checksum

Overload 1
dbms_crypto_toolkit.keyedHash(
persona    IN  Persona,
input      IN  RAW,
keyed_hash OUT RAW,
hash_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.keyedHash(
persona    IN Persona,
input      IN RAW,
hash_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.keyedHash(
persona      IN  Persona,
input_string IN  VARCHAR2,
keyed_hash   OUT RAW,
hash_state   IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.keyedHash(
persona      IN Persona,
input_string IN VARCHAR2,
hash_state   IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
 
OPENPERSONA
Opens a persona in the open wallet dbms_crypto_toolkit.openPersona(persona IN OUT Persona);
See Demo Below
 
OPENWALLET
Opens the identified wallet

Overload 1
dbms_crypto_toolkit.openWallet(
password                IN     VARCHAR2,
wallet                  IN OUT Wallet,
persona_list               OUT Persona_List,
wallet_resource_locator IN     VARCHAR2 DEFAULT NULL);
See Demo Below
Opens the wallet kept by the package

Overload 2
dbms_crypto_toolkit.openWallet(
password                IN     VARCHAR2,
persona_list               OUT Persona_List,
wallet_resource_locator IN     VARCHAR2 DEFAULT NULL);
TBD
 
PKDECRYPT
Decrypt for one recipient

Overload 1
dbms_crypto_toolkit.PKDecrypt(
persona          IN  Persona,
input            IN  RAW,
decrypted_data   OUT RAW,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.PKDecrypt(
persona          IN Persona,
input            IN RAW,
decryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.PKDecrypt(
persona          IN  Persona,
input_string     IN  VARCHAR2,
decrypted_string OUT VARCHAR2,
decryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.PKDecrypt(
persona          IN Persona,
input_string     IN VARCHAR2,
decryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
 
PKENCRYPT
Encrypt for one recipient

Overload 1
dbms_crypto_toolkit.PKEncrypt(
persona          IN  Persona,
recipient        IN  Identity,
input            IN  RAW,
encrypted_data   OUT RAW,
encryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 2 dbms_crypto_toolkit.PKEncrypt(
persona          IN Persona,
recipient        IN Identity,
input            IN RAW,
encryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.PKEncrypt(
persona          IN  Persona,
recipient        IN  Identity,
input_string     IN  VARCHAR2,
encrypted_string OUT VARCHAR2,
encryption_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.PKEncrypt(
persona          IN Persona,
recipient        IN Identity,
input_string     IN VARCHAR2,
encryption_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
Overload 5 dbms_crypto_toolkit.PKEncrypt(
persona              IN  Persona,
number_of_recipients IN  POSITIVE,
recipient_list       IN  Identity_Array,
input                IN  RAW,
encrypted_data       OUT RAW,
encryption_state     IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 6 dbms_crypto_toolkit.PKEncrypt(
persona              IN Persona,
number_of_recipients IN POSITIVE,
recipient_list       IN Identity_Array,
input                IN RAW,
encryption_state     IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 7 dbms_crypto_toolkit.PKEncrypt(
persona              IN  Persona,
number_of_recipients IN  POSITIVE,
recipient_list       IN  Identity_Array,
input_string         IN  VARCHAR2,
encrypted_string     OUT VARCHAR2,
encryption_state     IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 8 dbms_crypto_toolkit.PKEncrypt(
persona              IN Persona,
number_of_recipients IN POSITIVE,
recipient_list       IN Identity_Array,
input_string         IN VARCHAR2,
encryption_state     IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
 
RANDOMBYTES
Generates random bytes

Overload 1
dbms_crypto_toolkit.randomBytes(
persona                 IN  Persona,
number_of_bytes_desired IN  POSITIVE,
random_bytes            OUT RAW);
TBD
Overload 2 dbms_crypto_toolkit.randomBytes(
persona                 IN Persona,
number_of_bytes_desired IN POSITIVE)
RETURN RAW;
TBD
 
RANDOMNUMBER
Generates random numbers

Overload 1
dbms_crypto_toolkit.randomNumber(persona IN Persona, random_number OUT BINARY_INTEGER);
TBD
Overload 2 dbms_crypto_toolkit.randomNumber(persona IN Persona) RETURN BINARY_INTEGER;
TBD
 
REMOVEIDENTITY
Destroys an identity dbms_crypto_toolkit.removeIdentity(identity OUT Identity);
SQL> DECLARE
  2   RetVal dbms_crypto_toolkit_types.identity;
  3  BEGIN
  4    dbms_crypto_toolkit.removeIdentity(RetVal);
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-28817: PL/SQL function returned an error.
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT_FFI", line 290
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT", line 253
ORA-06512: at line 4
 
REMOVEPERSONA
Removes a persona from a wallet dbms_crypto_toolkit.removePersona(persona IN OUT Persona);
TBD
 
SEEDRANDOM
Generates a random seed value
Overload 1
dbms_crypto_toolkit.seedRandom(persona IN Persona, seed IN RAW);
TBD
Overload 2 dbms_crypto_toolkit.seedRandom(persona IN Persona, seed IN VARCHAR2);
TBD
Overload 3 dbms_crypto_toolkit.seedRandom(persona IN Persona, seed IN BINARY_INTEGER);
TBD
 
SIGN
Create an attached signature associated with the current persona

Overload 1
dbms_crypto_toolkit.sign(
persona         IN  Persona,
input           IN  RAW,
signature       OUT RAW,
signature_state IN  Crypto_Engine_State
DEFAULT END_PROCESSING);
See Demo Below
Overload 2 dbms_crypto_toolkit.sign(
persona         IN Persona,
input           IN RAW,
signature_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.sign(
persona         IN  Persona,
input_string    IN  VARCHAR2,
signature       OUT RAW,
signature_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
See Demo Below
Overload 4 dbms_crypto_toolkit.sign(
persona         IN Persona,
input_string    IN VARCHAR2,
signature_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
 
SIGNDETACHED
Creates a signature generated from a message kept separate from the message signature associated with the current persona

Overload 1
dbms_crypto_toolkit.signDetached(
persona         IN  Persona,
input           IN  RAW,
signature       OUT RAW,
signature_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
See Demo Below
Overload 2 dbms_crypto_toolkit.signDetached(
persona         IN Persona,
input           IN RAW,
signature_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.signDetached(
persona         IN  Persona,
input_string    IN  VARCHAR2,
signature       OUT RAW,
signature_state IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.signDetached(
persona         IN Persona,
input_string    IN VARCHAR2,
signature_state IN Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
 
STOREPERSONA
Stores the persona, a combination of an identity (public information) and associated private information

Overload 1
dbms_crypto_toolkit.storePersona(
persona IN OUT Persona,
wallet  IN OUT Wallet);
TBD
Used by applications that want to use the wallet kept by the package

Overload 2
dbms_crypto_toolkit.storePersona(persona IN OUT Persona);
SQL> DECLARE
  2   RetVal dbms_crypto_toolkit_types.persona;
  3  BEGIN
  4    dbms_crypto_toolkit.storePersona(RetVal);
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-28836: Wallet is not open.
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT", line 172
ORA-06512: at line 4


-- follow the link at page bottom for "Wallet" to create a wallet and open it

SQL> DECLARE
  2   RetVal dbms_crypto_toolkit_types.persona;
  3  BEGIN
  4    dbms_crypto_toolkit.storePersona(RetVal);
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-28836: Wallet is not open.
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT", line 172
ORA-06512: at line 4


SQL> SELECT status
  2  FROM v$encryption_wallet;

STATUS
-------
OPEN
 
STOREPERSONA
Stores the persona, a combination of an identity (public information) and associated private information

Overload 1
dbms_crypto_toolkit.storePersona(
persona IN OUT Persona,
wallet  IN OUT Wallet);
TBD
Used by applications that want to use the wallet kept by the package

Overload 2
dbms_crypto_toolkit.storePersona(persona IN OUT Persona);
SQL> DECLARE
  2   RetVal dbms_crypto_toolkit_types.persona;
  3  BEGIN
  4    dbms_crypto_toolkit.storePersona(RetVal);
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-28836: Wallet is not open.
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT", line 172
ORA-06512: at line 4


-- follow the link at page bottom for "Wallet" to create a wallet and open it

SQL> DECLARE
  2   RetVal dbms_crypto_toolkit_types.persona;
  3  BEGIN
  4    dbms_crypto_toolkit.storePersona(RetVal);
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-28836: Wallet is not open.
ORA-06512: at "SYS.DBMS_CRYPTO_TOOLKIT", line 172
ORA-06512: at line 4


SQL> SELECT status
  2  FROM v$encryption_wallet;

STATUS
-------
OPEN
 
STORETRUSTEDIDENTITY
Stores an identity as a trustpoint within a wallet dbms_crypto_toolkit.storeTrustedIdentity(
identity IN OUT Identity,
persona  IN     Persona);
TBD
 
TERMINATE
Stop Cryptographic Toolkit operation dbms_crypto_toolkit.terminate;
exec dbms_crypto_toolkit.terminate;
 
VALIDATE
Uses the trusted identities associated with a persona to validate an identity dbms_crypto_toolkit.validate(
persona  IN Persona,
identity IN Identity)
RETURN BOOLEAN;
TBD
 
VERIFY
Verify an attached signature

Overload 1
dbms_crypto_toolkit.verify(
persona                IN  Persona,
signature              IN  RAW,
extracted_message      OUT RAW,
verified               OUT BOOLEAN,
validated              OUT BOOLEAN,
signing_party_identity OUT Identity,
signature_state        IN  Crypto_Engine_State DEFAULT END_PROCESSING);
See Demo Below
Overload 2 dbms_crypto_toolkit.verify(
persona                IN  Persona,
signature              IN  RAW,
verified               OUT BOOLEAN,
validated              OUT BOOLEAN,
signing_party_identity OUT Identity,
signature_state        IN  Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN RAW;
TBD
Overload 3 dbms_crypto_toolkit.verify(
persona                  IN  Persona,
signature                IN  RAW,
extracted_message_string OUT VARCHAR2,
verified                 OUT BOOLEAN,
validated                OUT BOOLEAN,
signing_party_identity   OUT Identity,
signature_state          IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
Overload 4 dbms_crypto_toolkit.verify(
persona                IN  Persona,
signature              IN  RAW,
verified               OUT BOOLEAN,
validated              OUT BOOLEAN,
signing_party_identity OUT Identity,
signature_state        IN  Crypto_Engine_State DEFAULT END_PROCESSING)
RETURN VARCHAR2;
TBD
 
VERIFYDETACHED
Verify a detached signature

Overload 1
dbms_crypto_toolkit.verifyDetached(
persona                IN  Persona,
data                   IN  RAW,
signature              IN  RAW,
verified               OUT BOOLEAN,
validated              OUT BOOLEAN,
signing_party_identity OUT Identity,
signature_state        IN  Crypto_Engine_State DEFAULT END_PROCESSING);
See Demo Below
Overload 2 dbms_crypto_toolkit.verifyDetached(
persona                IN  Persona,
data_string            IN  VARCHAR2,
signature              IN  RAW,
verified               OUT BOOLEAN,
validated              OUT BOOLEAN,
signing_party_identity OUT Identity,
signature_state        IN  Crypto_Engine_State DEFAULT END_PROCESSING);
TBD
 
Demo
This crypto toolkit demo was published by Oracle as:

Oracle Cryptographic Toolkit Programmer's Guide
Release 2.0.4
A54082-02
Sample PL/SQL Code

It has been modified for clarity and to fix a number of syntax errors that prevent the Oracle demo from compiling.
conn sys@pdbdev as sysdba
set serveroutput on

DECLARE
 all_done         BOOLEAN := FALSE;
 decrypted_string VARCHAR2 (2048);
 encrypted_string VARCHAR2 (2048);
 extracted_string VARCHAR2 (128);
 hash_string      VARCHAR2 (2048);
 persona          dbms_crypto_toolkit.persona;
 persona_list     dbms_crypto_toolkit.persona_list;
 recipient        dbms_crypto_toolkit.identity;
 signature        RAW(2048);
 signing_party    dbms_crypto_toolkit.identity;
 string_input     VARCHAR2(6) := '123456';
 string_validated BOOLEAN := FALSE;
 string_verified  BOOLEAN := FALSE;
 wallet           dbms_crypto_toolkit.wallet;

 -- package state flags
 initialized      BOOLEAN := FALSE;
 wallet_opened    BOOLEAN := FALSE;
 persona_opened   BOOLEAN := FALSE;

 encrypt_unsupported_msg VARCHAR2(64) := 'Encryption Unsupported - Ignoring Exception';

 done_exception EXCEPTION;
 operation_unsupported EXCEPTION;

 PRAGMA EXCEPTION_INIT (operation_unsupported, -28841);
BEGIN
  dbms_crypto_toolkit.initialize;
  initialized := TRUE;

  -- open wallet
  dbms_crypto_toolkit.openWallet('oracle1!', wallet, persona_list, 'default:');
  wallet_opened := TRUE;

  -- establish the identity associated with the first persona in the wallet
  dbms_output.put_line('Alias: ' || persona_list(1).alias);
  dbms_output.put_line('Comment: ' || persona_list(1).comment);
  persona.persona := persona_list(1).persona;
  recipient.descriptor := persona_list(1).identity;

  -- open the first persona
  dbms_crypto_toolkit.openPersona(persona);
  persona_opened := TRUE;

  -- create an attached signature associated with the current persona
  dbms_crypto_toolkit.sign(persona=>persona, input=>string_input, signature=>signature);

  -- verify the attached signature
  dbms_crypto_toolkit.verify(persona => persona,
                             signature => signature,
                             extracted_message => extracted_string,
                             verified => string_verified,
                             validated => string_validated,
                             signing_party_identity => signing_party);

  IF string_validated THEN
    dbms_output.put_line('Signature Validated');
  ELSE
    NULL;  -- need to handle failure condition
  END IF;

  IF string_verified THEN
    dbms_output.put_line('Verified');
  ELSE
    NULL;  -- need to handle failure condition
  END IF;

  -- create a detached signature associated with the current persona
  dbms_crypto_toolkit.signDetached(persona => persona,
                                  input => string_input,
                                  signature => signature);

  -- verify the detached signature
  dbms_crypto_toolkit.verifyDetached(persona => persona,
                                     data => string_input,
                                     signature => signature,
                                     verified => string_verified,
                                     validated => string_validated,
                                     signing_party_identity => signing_party);

  IF string_validated THEN
    dbms_output.put_line('Validated');
  ELSE
    NULL;  -- need to handle failure condition
  END IF;

  IF string_verified THEN
    dbms_output.put_line('Verified');
  ELSE
    NULL;  -- need to handle failure condition
  END IF;

  -- generate a hash of the current message
  dbms_crypto_toolkit.hash(persona => persona,
                           input => string_input,
                           hash => hash_string);

  IF string_input = hash_string THEN
    dbms_output.put_line('Hash Succeeded');
  END IF;

  all_done := TRUE;
  RAISE done_exception;
EXCEPTION
  WHEN OTHERS THEN
    -- close the current open persona
    IF persona_opened THEN
      dbms_crypto_toolkit.closePersona(persona);
    END IF;

    -- close the wallet
    IF wallet_opened THEN
      dbms_crypto_toolkit.closeWallet(wallet);
    END IF;

    -- stop Cryptographic Toolkit operation
    IF initialized THEN
      dbms_crypto_toolkit.terminate;
    END IF;

    IF NOT all_done THEN
      RAISE;
    END IF;
END;
/

Related Topics
DBMS_CRYPTO
DBMS_CRYPTO_FFI
DBMS_CRYPTO_INTERNAL
DBMS_CRYPTO_TOOLKIT_FFI
DBMS_CRYPTO_TOOLKIT_TYPES
DBMS_RANDOM
DBMS_SQLHASH