@@ -4095,11 +4095,12 @@ private void u2FRegister(APDU apdu) {
40954095 throwException (ISO7816 .SW_COMMAND_NOT_ALLOWED );
40964096 }
40974097
4098- apdu .setIncomingAndReceive ();
4098+ final short amtRead = apdu .setIncomingAndReceive ();
40994099 short lc = apdu .getIncomingLength ();
41004100 if (lc != (short )(CLIENT_DATA_HASH_LEN + RP_HASH_LEN )) {
41014101 throwException (ISO7816 .SW_WRONG_LENGTH );
41024102 }
4103+ final byte [] reqBuffer = fullyReadReq (apdu , lc , amtRead , true );
41034104
41044105 // TODO: handle very long certificates
41054106 short attCertLen = 0 ;
@@ -4116,27 +4117,26 @@ private void u2FRegister(APDU apdu) {
41164117 throwException (ISO7816 .SW_DATA_INVALID );
41174118 }
41184119
4119- final byte [] apduBuffer = apdu . getBuffer () ;
4120+ short readOffset = 0 ;
41204121 bufferManager .initializeAPDU (apdu );
41214122
4122- final short scratchClientDataHashHandle = bufferManager .allocate (apdu , CLIENT_DATA_HASH_LEN , BufferManager .ANYWHERE );
4123+ final short scratchClientDataHashHandle = bufferManager .allocate (apdu , CLIENT_DATA_HASH_LEN , BufferManager .NOT_APDU_BUFFER );
41234124 final short scratchClientDataHashOffset = bufferManager .getOffsetForHandle (scratchClientDataHashHandle );
41244125 final byte [] scratchClientDataHashBuffer = bufferManager .getBufferForHandle (apdu , scratchClientDataHashHandle );
4125- final short scratchRPIDHashHandle = bufferManager .allocate (apdu , RP_HASH_LEN , BufferManager .ANYWHERE );
4126+ final short scratchRPIDHashHandle = bufferManager .allocate (apdu , RP_HASH_LEN , BufferManager .NOT_APDU_BUFFER );
41264127 final short scratchRPIDHashOffset = bufferManager .getOffsetForHandle (scratchRPIDHashHandle );
41274128 final byte [] scratchRPIDHashBuffer = bufferManager .getBufferForHandle (apdu , scratchRPIDHashHandle );
4128- final short publicKeyHandle = bufferManager .allocate (apdu , PUB_KEY_LENGTH , BufferManager .NOT_LOWER_APDU );
4129+ final short publicKeyHandle = bufferManager .allocate (apdu , PUB_KEY_LENGTH , BufferManager .NOT_APDU_BUFFER );
41294130 final short publicKeyOffset = bufferManager .getOffsetForHandle (publicKeyHandle );
41304131 final byte [] publicKeyBuffer = bufferManager .getBufferForHandle (apdu , publicKeyHandle );
4131- final short scratchCredHandle = bufferManager .allocate (apdu , CREDENTIAL_ID_LEN , BufferManager .ANYWHERE );
4132+ final short scratchCredHandle = bufferManager .allocate (apdu , CREDENTIAL_ID_LEN , BufferManager .NOT_APDU_BUFFER );
41324133 final short scratchCredOffset = bufferManager .getOffsetForHandle (scratchCredHandle );
41334134 final byte [] scratchCredBuffer = bufferManager .getBufferForHandle (apdu , scratchCredHandle );
41344135
4135- short readOffset = apdu .getOffsetCdata ();
4136- Util .arrayCopyNonAtomic (apduBuffer , readOffset ,
4136+ Util .arrayCopyNonAtomic (reqBuffer , readOffset ,
41374137 scratchClientDataHashBuffer , scratchClientDataHashOffset , CLIENT_DATA_HASH_LEN );
41384138 readOffset += CLIENT_DATA_HASH_LEN ;
4139- Util .arrayCopyNonAtomic (apduBuffer , readOffset ,
4139+ Util .arrayCopyNonAtomic (reqBuffer , readOffset ,
41404140 scratchRPIDHashBuffer , scratchRPIDHashOffset , RP_HASH_LEN );
41414141
41424142 // Out of the APDU buffer; it's all free!
0 commit comments