 /*
 * Copyright(C) 2000 Проект ИОК
 *
 * Этот файл содержит информацию, являющуюся
 * собственностью компании Крипто Про.
 *
 * Любая часть этого файла не может быть скопирована,
 * исправлена, переведена на другие языки,
 * локализована или модифицирована любым способом,
 * откомпилирована, передана по сети с или на
 * любую компьютерную систему без предварительного
 * заключения соглашения с компанией Крипто Про.
 */

#include "ric_prj.h"

DWORD ric_passwd_change( 
    TSupSysContext *context, 
    TSupSysInfo *info )
{
    TReaderInfoPasswdChangeAscii *inf = (TReaderInfoPasswdChangeAscii*)info;
    TRICContext *ctx = (TRICContext*)context;
    DWORD code;
    char new_pin[PIN_LENGTH + 1];

    SUPSYS_PRE_CONTEXT( context, TRICContext );
    SUPSYS_PRE_INFO( info, TReaderInfoPasswdChangeAscii);

    if (inf->passwd.length > PIN_LENGTH) {
	return (DWORD)SCARD_E_INVALID_CHV;
    }
    if (inf->passwd.length > 0) {
	SUPSYS_PRE(inf->passwd.text != NULL);
	SUPSYS_PRE(inf->passwd.length == strlen(inf->passwd.text));
	strcpy((char*)new_pin, inf->passwd.text);
	if (inf->passwd.length < PIN_LENGTH)
	    memset(new_pin + inf->passwd.length, 0x31, PIN_LENGTH - inf->passwd.length);
    }
    else {
	memset(new_pin, 0x31, PIN_LENGTH);
    }
    code = ctx->change_pin( ctx, (unsigned char*)new_pin );
    if( code ) 
    {
	support_zero_memory(new_pin, 8);
	return code;
    }
    ctx->status = RIC_STATUS_PIN_VERIFIED;
    return ERROR_SUCCESS;
}
/* end of file: $Id: ric_pch.c 186620 2018-12-24 13:38:12Z borodin $ */
