Ultimi argomenti attivi
» attestazione di avvenuto recupero - art 198 c2bisDa romeo2 Mer Gen 25, 2023 12:54 pm
» MUD Comuni
Da luanap Mer Gen 25, 2023 12:34 pm
» art. 193-bis: INTERMODALE: un passo in avanti o 2 indietro ?
Da vaghestelledellorsa Mer Gen 18, 2023 9:48 pm
» stampa registro r/c in modalità digitale
Da tfrab Mer Gen 18, 2023 10:10 am
» modalità semplificata e ordinaria di gestione dei RAEE
Da tfrab Mar Gen 17, 2023 10:20 am
» RIFIUTI DA EMULSIONI OLEOSE E TRASPORTO MERCI PERICOLOSE
Da tfrab Gio Gen 12, 2023 5:18 pm
» MUD 2023 - ci sono novità?
Da nickcla Mer Gen 11, 2023 1:44 pm
» raggruppamento temporaneo presso la sede o unità locale del manutentore
Da Paolo UD Mer Gen 11, 2023 1:13 pm
» Cantiere edile: come compilare correttamente il mud?
Da erdna79 Mar Gen 10, 2023 1:08 pm
» Comunicazione nomina consulente ADR e sedi operative
Da Maniscalco Mar Gen 10, 2023 12:09 am
EasySign.dll - Passare il nome utente
4 partecipanti
Pagina 1 di 1
EasySign.dll - Passare il nome utente
Buongiorno a tutti.
A qualcuno risulta che sia possibile passare come parametro alla funzione EasySign della libreria EasySign.dll anche il nome utente oltre al codice PIN??
Nei dispositivi multiutente passando il solo PIN compare sempre la mascherina che chiede il nome utente a differenza di quanto avviene nell'ambiente operativo con la funzione di memorizzazione del PIN attiva :-(
Grazie
Input
A qualcuno risulta che sia possibile passare come parametro alla funzione EasySign della libreria EasySign.dll anche il nome utente oltre al codice PIN??
Nei dispositivi multiutente passando il solo PIN compare sempre la mascherina che chiede il nome utente a differenza di quanto avviene nell'ambiente operativo con la funzione di memorizzazione del PIN attiva :-(
Grazie
Input
Input- Utente Attivo
- Messaggi : 76
Data d'iscrizione : 20.04.11
Re: EasySign.dll - Passare il nome utente
è un limite non eliminabile dei token multiutente: al massimo si può cercare di 'compilare' automaticamente la mascherina con funzioni tipo sendkeys o mettere l'identity nella clipboard per facilitare la vita all'uente
fabiodafirenze- Utente Attivo
- Messaggi : 401
Data d'iscrizione : 20.01.10
Re: EasySign.dll - Passare il nome utente
Beh però penso sia un limite della DLL attuale... basterebbe poter passare alla funzione di firma oltre al PIN anche il nome utente o no?
Speriamo facciamo un aggiornamento della DLL anche in tal senso..
Grazie,
ciao
Speriamo facciamo un aggiornamento della DLL anche in tal senso..
Grazie,
ciao
Input- Utente Attivo
- Messaggi : 76
Data d'iscrizione : 20.04.11
Re: EasySign.dll - Passare il nome utente
Si può utilizzare la funzione di cache della Identity della libreria SoftTokenEngine.
Nell'ultima versione della libreria pubblicata (quella presente nelle chiavette col software aggiornato) è presente una nuova funzione che si chiama "request_cache_user":
c:\>dumpbin /exports SoftTokenEngine.dll
[...]
84 50 0000BC70 request_cache_user
[...]
Dovrebbe essere quella che utilizza il software del token USB per memorizzare l'identity inserita. Non mi risulta che sia documentata ma è possibile comunque utilizzarla.
Normalmente è un po' complicato ricavare informazioni unicamente dalla tabella di esportazione della DLL (mancano tipo e numero dei parametri e del valore di ritorno delle funzioni), ma disassemblando il codice di quella funzione si ottiene questo:
c:\>dumpbin /disasm SoftTokenEngine.dll
[...]
10000000 image base (10000000 to 10291FFF)
[...]
1000BC70: mov eax,dword ptr [esp+4]
1000BC74: mov dword ptr ds:[10284C9Ch],eax
1000BC79: test eax,eax
1000BC7B: jne 1000BC87
1000BC7D: mov dword ptr ds:[100A47A8h],0FFFFFFFFh
1000BC87: ret
[...]
Questo codice corrisponde alla versione compilata (così a occhio direi con GCC) di qualcosa che in C si potrebbe rappresentare con:
// [---]
int bCacheIdentity = 0;
int bQualcosAltro = 0;
void request_cache_user (int bVal) {
bCacheIdentity = bVal;
if (!bVal) {
bQualcosAltro = -1;
}
}
// [---]
In pratica ciò che fa questa funzione è assegnare ad un intero del segmento .data dell'immagine in memoria della libreria (in pratica una variabile globale alla DLL) il valore che ottiene come parametro, presumibilmente interpretato come booleano. Se si invoca la funzione passando un valore diverso da 0 come parametro (ossia un boolean a true), l'identity non viene richiesta successivamente alla prima invocazione della funzione di firma (più precisamente all'invocazione della funzione C_Login dell'interfaccia PKCS11). Questo ovviamente è vero finché la libreria non viene scaricata, con invocazione esplicita o perché il processo che effettua la firma termina.
Per invocare la funzione in ambienti bytecoded (.NET, Java) non è possibile utilizzare le funzioni di importazioni solite (P/Invoke, JNA) perché la libreria SoftTokenEngine non funziona se caricata al di fuori del token USB, bisogna caricare la libreria dinamicamente con la funzione di sistema (in win32 "LoadLibrary"), cercare un puntatore alla funzione ("GetProcAddress"), e farne il cast ad un function pointer opportunamente tipizzato. In .NET:
[...]
[DllImport ("kernel32", CharSet = CharSet.Ansi)]
internal static extern IntPtr GetProcAddress (IntPtr hModule, string lpProcName);
[DllImport ("kernel32")]
internal static extern IntPtr LoadLibrary (string lpLibFileName);
delegate void fpt_request_cache_user (int bVal);
static void Init (string modulePath) {
IntPtr ptrDll;
if ((ptrDll = KernelUtil.LoadLibrary (modulePath)) == IntPtr.Zero) {
throw new Exception ("Non trovo la libreria: " + modulePath);
}
IntPtr procAddress = KernelUtil.GetProcAddress (ptrDll, "request_cache_user");
if (procAddress != IntPtr.Zero) {
fpt_request_cache_user fpRequestCacheUser = (fpt_request_cache_user) Marshal.GetDelegateForFunctionPointer (procAddress, typeof (fpt_request_cache_user));
fpRequestCacheUser (1);
}
}
[...]
Questa cosa funziona bene se si usa l'interfaccia PKCS11, e dovrebbe funzionare anche con la EasySign.dll (che però non ho mai usato).
Il nome utente non può essere passato alla funzione di firma di EasySign, perché questa usa l'interfaccia dello standard PKCS11 implementata dal SoftTokenEngine, e la dialog di richiesta dell'Identity proviene proprio dalla funzione C_Login dell'interfaccia PKCS11, la cui signature non può essere modificata se si vuole rimanere compatibili allo standard.
Potrebbero aggiungere un parametro alla funzione di firma EasySign (e magari documentare la funzione di cui sopra), magari lo faranno nella nuova versione, ammesso che ne escano ancora di nuove.
Nell'ultima versione della libreria pubblicata (quella presente nelle chiavette col software aggiornato) è presente una nuova funzione che si chiama "request_cache_user":
c:\>dumpbin /exports SoftTokenEngine.dll
[...]
84 50 0000BC70 request_cache_user
[...]
Dovrebbe essere quella che utilizza il software del token USB per memorizzare l'identity inserita. Non mi risulta che sia documentata ma è possibile comunque utilizzarla.
Normalmente è un po' complicato ricavare informazioni unicamente dalla tabella di esportazione della DLL (mancano tipo e numero dei parametri e del valore di ritorno delle funzioni), ma disassemblando il codice di quella funzione si ottiene questo:
c:\>dumpbin /disasm SoftTokenEngine.dll
[...]
10000000 image base (10000000 to 10291FFF)
[...]
1000BC70: mov eax,dword ptr [esp+4]
1000BC74: mov dword ptr ds:[10284C9Ch],eax
1000BC79: test eax,eax
1000BC7B: jne 1000BC87
1000BC7D: mov dword ptr ds:[100A47A8h],0FFFFFFFFh
1000BC87: ret
[...]
Questo codice corrisponde alla versione compilata (così a occhio direi con GCC) di qualcosa che in C si potrebbe rappresentare con:
// [---]
int bCacheIdentity = 0;
int bQualcosAltro = 0;
void request_cache_user (int bVal) {
bCacheIdentity = bVal;
if (!bVal) {
bQualcosAltro = -1;
}
}
// [---]
In pratica ciò che fa questa funzione è assegnare ad un intero del segmento .data dell'immagine in memoria della libreria (in pratica una variabile globale alla DLL) il valore che ottiene come parametro, presumibilmente interpretato come booleano. Se si invoca la funzione passando un valore diverso da 0 come parametro (ossia un boolean a true), l'identity non viene richiesta successivamente alla prima invocazione della funzione di firma (più precisamente all'invocazione della funzione C_Login dell'interfaccia PKCS11). Questo ovviamente è vero finché la libreria non viene scaricata, con invocazione esplicita o perché il processo che effettua la firma termina.
Per invocare la funzione in ambienti bytecoded (.NET, Java) non è possibile utilizzare le funzioni di importazioni solite (P/Invoke, JNA) perché la libreria SoftTokenEngine non funziona se caricata al di fuori del token USB, bisogna caricare la libreria dinamicamente con la funzione di sistema (in win32 "LoadLibrary"), cercare un puntatore alla funzione ("GetProcAddress"), e farne il cast ad un function pointer opportunamente tipizzato. In .NET:
[...]
[DllImport ("kernel32", CharSet = CharSet.Ansi)]
internal static extern IntPtr GetProcAddress (IntPtr hModule, string lpProcName);
[DllImport ("kernel32")]
internal static extern IntPtr LoadLibrary (string lpLibFileName);
delegate void fpt_request_cache_user (int bVal);
static void Init (string modulePath) {
IntPtr ptrDll;
if ((ptrDll = KernelUtil.LoadLibrary (modulePath)) == IntPtr.Zero) {
throw new Exception ("Non trovo la libreria: " + modulePath);
}
IntPtr procAddress = KernelUtil.GetProcAddress (ptrDll, "request_cache_user");
if (procAddress != IntPtr.Zero) {
fpt_request_cache_user fpRequestCacheUser = (fpt_request_cache_user) Marshal.GetDelegateForFunctionPointer (procAddress, typeof (fpt_request_cache_user));
fpRequestCacheUser (1);
}
}
[...]
Questa cosa funziona bene se si usa l'interfaccia PKCS11, e dovrebbe funzionare anche con la EasySign.dll (che però non ho mai usato).
Il nome utente non può essere passato alla funzione di firma di EasySign, perché questa usa l'interfaccia dello standard PKCS11 implementata dal SoftTokenEngine, e la dialog di richiesta dell'Identity proviene proprio dalla funzione C_Login dell'interfaccia PKCS11, la cui signature non può essere modificata se si vuole rimanere compatibili allo standard.
Potrebbero aggiungere un parametro alla funzione di firma EasySign (e magari documentare la funzione di cui sopra), magari lo faranno nella nuova versione, ammesso che ne escano ancora di nuove.
riccardock- Membro della community
- Messaggi : 33
Data d'iscrizione : 08.11.13
Re: EasySign.dll - Passare il nome utente
riccardock ha scritto:Potrebbero aggiungere un parametro alla funzione di firma EasySign (e magari documentare la funzione di cui sopra), magari lo faranno nella nuova versione, ammesso che ne escano ancora di nuove.
Spero proprio che aggiungano il parametro in più da passare alla funzione della EasySign...
Ti ringrazio per l'aiuto.
Ciao
Input- Utente Attivo
- Messaggi : 76
Data d'iscrizione : 20.04.11
aiuttto
Qualcuno è riuscito a risolvere il problema???
rensy78- Nuovo Utente
- Messaggi : 4
Data d'iscrizione : 07.06.12

» GRUPPO D'IMBALLAGGIO
» NOME UTENTE o PASSWORD ERRATI
» Impossibile aprire la sessione per l'utente
» Nuovo nome per il sito?
» Selex,un nome una garanzia.
» NOME UTENTE o PASSWORD ERRATI
» Impossibile aprire la sessione per l'utente
» Nuovo nome per il sito?
» Selex,un nome una garanzia.
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.