Class FinSecurityMediaSmartCard
Abstract base class for sll smart card based IFinSecurityMedia interface implementations.
public abstract class FinSecurityMediaSmartCard : IFinSecurityMedia, IFinSecurityMediaSmartCard
- Inheritance
-
FinSecurityMediaSmartCard
- Implements
- Derived
- Inherited Members
Remarks
This class implements all methods of the IFinSecurityMedia interface, delegating card specific work to some abstract methods that must be overridden by the derived concrete class.
Constructors
FinSecurityMediaSmartCard()
public FinSecurityMediaSmartCard()
Properties
Capabilities
Delegates to OnGetCapabilities()
public FinSecurityMediaCaps Capabilities { get; }
Property Value
Card
protected CardExpress Card { get; }
Property Value
- CardExpress
CardEncoding
Text encoding that is used by the text fields of the smart card.
protected Encoding CardEncoding { get; set; }
Property Value
Remarks
The default Encoding is Windows 1252 encoding.
CardID
protected byte[] CardID { get; }
Property Value
- byte[]
ContactCapacity
Delegates to OnGetContactCapacity()
public int ContactCapacity { get; }
Property Value
MaxKeyLength
Delegates to OnGetMaxKeyLength()
public int MaxKeyLength { get; }
Property Value
PassphraseFlags
Delegates to OnGetPassphraseFlags()
public FinSecurityMediaPassphraseFlags PassphraseFlags { get; }
Property Value
PassphraseMaxLength
Delegates to OnGetPassphraseMaxLength()
public int PassphraseMaxLength { get; }
Property Value
PassphraseMinLength
Delegates to OnGetPassphraseMinLength()
public int PassphraseMinLength { get; }
Property Value
SecurityMediaID
Provides the hex representation of the EF_ID or similar file of this smart card.
public string SecurityMediaID { get; }
Property Value
SecurityMediaType
This base class is meant solely for smart card based implementations, hence this property always returns SmartCard.
public FinSecurityMediaType SecurityMediaType { get; }
Property Value
SecurityProfiles
public FinSecurityProfile[] SecurityProfiles { get; }
Property Value
Remarks
The default implementation always returns an array with a single RDH-1 element.
State
Indicates the current state of this IFinSecurityMedia implementation instance.
public FinSecurityMediaState State { get; }
Property Value
Methods
Authenticate(string, string)
public FinAuthenticateResult Authenticate(string sUserName, string sPassphrase)
Parameters
Returns
AuthenticateAdmin(string, string)
public FinAuthenticateResult AuthenticateAdmin(string sUserName, string sAdminPassphrase)
Parameters
Returns
AuthenticateSecure()
public FinAuthenticateResult AuthenticateSecure()
Returns
CanAuthenticateSecure()
public bool CanAuthenticateSecure()
Returns
CanChangePassphraseSecure()
public bool CanChangePassphraseSecure()
Returns
Cancel()
public void Cancel()
ChangePassphrase(string, string, string)
public FinAuthenticateResult ChangePassphrase(string sUserName, string sOldPassphrase, string sNewPassphrase)
Parameters
Returns
ChangePassphraseSecure()
public FinAuthenticateResult ChangePassphraseSecure()
Returns
ChangePin(CardPinControl, string, string)
protected FinAuthenticateResult ChangePin(CardPinControl aPinControl, string sOldPin, string sNewPin)
Parameters
Returns
ChangePinSecure(CardPinControl)
protected FinAuthenticateResult ChangePinSecure(CardPinControl aPinControl)
Parameters
aPinControlCardPinControl
Returns
Create(string, string, string)
Always throws a NotSupportedException.
public void Create(string sSecurityMediaID, string sUserName, string sPassphrase)
Parameters
CreateContact()
public FinContact CreateContact()
Returns
Decrypt(FinContact, FinSecureKey, FinOperationMode, byte[])
public byte[] Decrypt(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, byte[] vbCrypt)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModevbCryptbyte[]
Returns
- byte[]
ElevateKey(FinContact, FinSecureKey, FinSecureKeyState)
public void ElevateKey(FinContact aContact, FinSecureKey aKey, FinSecureKeyState nNewKeyState)
Parameters
aContactFinContactaKeyFinSecureKeynNewKeyStateFinSecureKeyState
Encrypt(FinContact, FinSecureKey, FinOperationMode, byte[])
public byte[] Encrypt(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, byte[] vbData)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModevbDatabyte[]
Returns
- byte[]
EraseContact(int)
public void EraseContact(int nContactIndex)
Parameters
nContactIndexint
EraseKey(FinContact, FinSecureKey)
public void EraseKey(FinContact aContact, FinSecureKey aKey)
Parameters
aContactFinContactaKeyFinSecureKey
ExtractField(byte[], int, int)
protected string ExtractField(byte[] vbData, int nOffset, int nLength)
Parameters
Returns
ExtractInteger(byte[], int, int)
protected int ExtractInteger(byte[] vbData, int nOffset, int nLength)
Parameters
Returns
GenerateKey(FinContact, FinSecureKeyType, int, int, int)
public FinSecureKey GenerateKey(FinContact aContact, FinSecureKeyType nKeyType, int nKeyLength, int nKeyNumber, int nKeyVersion)
Parameters
aContactFinContactnKeyTypeFinSecureKeyTypenKeyLengthintnKeyNumberintnKeyVersionint
Returns
GetCardResourceManager()
public static SCardResourceManager GetCardResourceManager()
Returns
- SCardResourceManager
Returns an established SCardResourceManager instance or null. If a valid instance is returned, then the caller is responsible for finally releasing and disposing that instance.
GetContactIndex(FinContact)
Extract and validate the ContactIndex field from the given FinContact
protected int GetContactIndex(FinContact aContact)
Parameters
aContactFinContact
Returns
Exceptions
- InvalidOperationException
The given FinContact does not have a ContactIndex field, or it is outside of the range supported by the card.
InitPassphrase(string, string)
public FinAuthenticateResult InitPassphrase(string sUserName, string sPassphrase)
Parameters
Returns
InsertField(byte[], int, int, string)
protected void InsertField(byte[] vbData, int nOffset, int nLength, string sValue)
Parameters
InsertInteger(byte[], int, int, int)
protected void InsertInteger(byte[] vbData, int nOffset, int nLength, int nValue)
Parameters
IsBlank(byte[])
Checks whether the given data is a blank record.
protected bool IsBlank(byte[] vbData)
Parameters
vbDatabyte[]
Returns
Remarks
This method performs a special blank test. If the entire given byte array is filled with the very same byte value, then it is assumed that the array is fully blank.
ObtainContact(int)
public FinContact ObtainContact(int nContactIndex)
Parameters
nContactIndexint
Returns
ObtainKey(FinContact, FinSecureKeyType, int, int)
public FinSecureKey ObtainKey(FinContact aContact, FinSecureKeyType nKeyType, int nKeyNumber, int nKeyVersion)
Parameters
aContactFinContactnKeyTypeFinSecureKeyTypenKeyNumberintnKeyVersionint
Returns
OnChangePin(string, string)
protected virtual FinAuthenticateResult OnChangePin(string sOldPin, string sNewPin)
Parameters
Returns
Remarks
Default implementation always throws a NotSupportedException.
OnChangePinSecure()
protected virtual FinAuthenticateResult OnChangePinSecure()
Returns
OnDecrypt(FinContact, FinSecureKey, FinOperationMode, byte[])
protected abstract byte[] OnDecrypt(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, byte[] vbCrypt)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModevbCryptbyte[]
Returns
- byte[]
OnEncrypt(FinContact, FinSecureKey, FinOperationMode, byte[])
protected virtual byte[] OnEncrypt(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, byte[] vbData)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModevbDatabyte[]
Returns
- byte[]
Remarks
Override this method in order to encrypt the given data with the smart card. The default implementation of this method just invokes Encrypt(FinOperationMode, byte[]).
OnEraseContact(int)
protected virtual void OnEraseContact(int nContactIndex)
Parameters
nContactIndexint
OnEraseKey(FinContact, FinSecureKey)
protected virtual void OnEraseKey(FinContact aContact, FinSecureKey aKey)
Parameters
aContactFinContactaKeyFinSecureKey
OnGenerateKey(FinContact, FinSecureKeyType, int, int, int)
protected virtual FinSecureKey OnGenerateKey(FinContact aContact, FinSecureKeyType nKeyType, int nKeyLength, int nKeyNumber, int nKeyVersion)
Parameters
aContactFinContactnKeyTypeFinSecureKeyTypenKeyLengthintnKeyNumberintnKeyVersionint
Returns
OnGetCapabilities()
protected abstract FinSecurityMediaCaps OnGetCapabilities()
Returns
OnGetContactCapacity()
protected abstract int OnGetContactCapacity()
Returns
OnGetMaxKeyLength()
protected virtual int OnGetMaxKeyLength()
Returns
- int
The default implementation always returns 96, the standard length for RDH-1 keys.
OnGetPassphraseFlags()
protected abstract FinSecurityMediaPassphraseFlags OnGetPassphraseFlags()
Returns
OnGetPassphraseMaxLength()
protected abstract int OnGetPassphraseMaxLength()
Returns
OnGetPassphraseMinLength()
protected virtual int OnGetPassphraseMinLength()
Returns
Remarks
The default implementation always returns zero.
OnGetSecurityProfiles()
protected virtual FinSecurityProfile[] OnGetSecurityProfiles()
Returns
OnInitContact(FinContact)
Override this method in order to provide additional initialisation for a new FinContact instance.
protected virtual void OnInitContact(FinContact aContact)
Parameters
aContactFinContact
Remarks
This method is invoked by the implementation of the CreateContact() after setting up appropriate default values for all required fields. The default implementation of OnInitContact does nothing.
OnInitPin(string)
protected virtual FinAuthenticateResult OnInitPin(string sPin)
Parameters
sPinstring
Returns
Remarks
Default implementation always throws a NotSupportedException.
OnReadContact(FinContact, int)
protected abstract void OnReadContact(FinContact aContact, int nContactIndex)
Parameters
aContactFinContactnContactIndexint
OnReadKey(FinContact, FinSecureKeyType, int, int)
protected abstract FinSecureKey OnReadKey(FinContact aContact, FinSecureKeyType nKeyType, int nKeyNumber, int nKeyVersion)
Parameters
aContactFinContactnKeyTypeFinSecureKeyTypenKeyNumberintnKeyVersionint
Returns
OnReleaseCard(CardExpress)
Must be overriden in order to clean up any context information that may have been collected since OnSelectCard(CardExpress) was called.
protected abstract void OnReleaseCard(CardExpress aCard)
Parameters
aCardCardExpress
OnSelectCard(CardExpress)
Must be override in order to implement selection of the card application.
protected abstract byte[] OnSelectCard(CardExpress aCard)
Parameters
aCardCardExpressHandle to successfully connected card. The overriding method must use this handle in order to access the card.
Returns
- byte[]
If successfull, then the unique card id (EF_ID or similar) must be returned. If the connected card does not appear to be supported, then
nullmust be returned.
OnSignHash(FinContact, FinSecureKey, FinOperationMode, FinHash, byte[])
protected abstract byte[] OnSignHash(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, FinHash nHash, byte[] vbHash)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModenHashFinHashvbHashbyte[]
Returns
- byte[]
OnUpdateKeyState(FinContact, FinSecureKey)
protected virtual void OnUpdateKeyState(FinContact aContact, FinSecureKey aKey)
Parameters
aContactFinContactaKeyFinSecureKey
OnVerify(FinContact, FinSecureKey, FinOperationMode, FinHash, byte[], byte[])
protected virtual bool OnVerify(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, FinHash nHash, byte[] vbHash, byte[] vbSignature)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModenHashFinHashvbHashbyte[]vbSignaturebyte[]
Returns
Remarks
Override this method in order to verify the given signature with the smart card. The default implementation of this method just invokes Verify(FinOperationMode, FinHash, byte[], byte[]).
OnVerifyPin(string)
protected abstract FinAuthenticateResult OnVerifyPin(string sPin)
Parameters
sPinstringPIN to verify. This is never null.
Returns
OnVerifyPinOK()
Invoked whenever the PIN was successfully verified and the object switches into the Authenticated state.
protected virtual void OnVerifyPinOK()
OnVerifyPinSecure()
protected abstract FinAuthenticateResult OnVerifyPinSecure()
Returns
OnWriteContact(FinContact, int)
protected virtual void OnWriteContact(FinContact aContact, int nContactIndex)
Parameters
aContactFinContactnContactIndexint
Remarks
The default implementation does nothing. It is perfectly legal for an implementation to not store contact information and simply ignore the StoreContact call.
OnWriteKey(FinContact, FinSecureKey)
protected virtual void OnWriteKey(FinContact aContact, FinSecureKey aKey)
Parameters
aContactFinContactaKeyFinSecureKey
ReadBinary(int, int)
protected byte[] ReadBinary(int nOffset, int nLength)
Parameters
Returns
- byte[]
ReadByte(int)
protected byte ReadByte(int nOffset)
Parameters
nOffsetint
Returns
ReadRecord(int, int)
protected byte[] ReadRecord(int nRecNo, int nLength)
Parameters
Returns
- byte[]
Release()
public void Release()
ResetKey(FinContact, FinSecureKey)
public void ResetKey(FinContact aContact, FinSecureKey aKey)
Parameters
aContactFinContactaKeyFinSecureKey
Select(string)
public FinAuthenticateResult Select(string sSecurityMediaID)
Parameters
sSecurityMediaIDstring
Returns
SelectCard(string)
public string SelectCard(string sReaderName)
Parameters
sReaderNamestring
Returns
SelectFile(int)
protected void SelectFile(int nFileID)
Parameters
nFileIDint
SendCommand(CardCommandAPDU)
protected CardResponseAPDU SendCommand(CardCommandAPDU aCmdAPDU)
Parameters
aCmdAPDUCardCommandAPDU
Returns
- CardResponseAPDU
SignHash(FinContact, FinSecureKey, FinOperationMode, FinHash, byte[])
public byte[] SignHash(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, FinHash nHash, byte[] vbHash)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModenHashFinHashvbHashbyte[]
Returns
- byte[]
StoreContact(int, FinContact)
public void StoreContact(int nContactIndex, FinContact aContact)
Parameters
nContactIndexintaContactFinContact
StoreKey(FinContact, FinSecureKey)
public void StoreKey(FinContact aContact, FinSecureKey aKey)
Parameters
aContactFinContactaKeyFinSecureKey
UpdateBinary(int, byte[])
protected void UpdateBinary(int nOffset, byte[] vbData)
Parameters
UpdateByte(int, byte)
protected void UpdateByte(int nOffset, byte nByte)
Parameters
UpdateRecord(int, byte[])
protected void UpdateRecord(int nRecNo, byte[] vbData)
Parameters
Verify(FinContact, FinSecureKey, FinOperationMode, FinHash, byte[], byte[])
public bool Verify(FinContact aContact, FinSecureKey aKey, FinOperationMode nOpMode, FinHash nHash, byte[] vbHash, byte[] vbSignature)
Parameters
aContactFinContactaKeyFinSecureKeynOpModeFinOperationModenHashFinHashvbHashbyte[]vbSignaturebyte[]
Returns
VerifyPin(CardPinControl, string)
protected FinAuthenticateResult VerifyPin(CardPinControl aPinControl, string sPin)
Parameters
aPinControlCardPinControlsPinstring
Returns
VerifyPinSecure(CardPinControl)
protected FinAuthenticateResult VerifyPinSecure(CardPinControl aPinControl)
Parameters
aPinControlCardPinControl