Bon je pense que c'est tout bon.
Code
Cliquez pour révéler
Cliquez pour masquer
public int[] cipherRsa(string login, string passwd)
{
int i = -1;
int length;
int[] ret;
DataReader baOut;
DataWriter baIn = new DataWriter();
baIn.WriteUTF(this.hcm.Salt);
baIn.WriteBytes(this.generateRandomAESKey());
baIn.WriteByte(login.Length);
baIn.WriteUTF(login);
baIn.WriteUTF(passwd);
baOut = new DataReader(RSAKey.publicEncrypt(this.PublicKey, baIn));
baOut.Position = 0;
length = baOut.data.Length;
ret = new int[length];
while (length-- != 0)
ret[++i] = baOut.ReadByte();
return (ret);
}
Mais en faite le plus gros problème c'est la suite, les fonctions qu'on retrouve après dans RSAKey.publicEncrypt() => PEM.ReadRSAPublicKey().
Et là c'est chaud, il y a des trucs que j'arrive pas a traduire.
Code
Cliquez pour révéler
Cliquez pour masquer
public static function readRSAPublicKey(str:String) : RSAKey
{
var arr:Array = null;
var der:ByteArray = extractBinary(RSA_PUBLIC_KEY_HEADER,RSA_PUBLIC_KEY_FOOTER,str);
if(der == null)
{
return null;
}
var obj:* = DER.parse(der);
if(obj is Array)
{
arr = obj as Array;
if(arr[0][0].toString() != OID.RSA_ENCRYPTION)
{
return null;
}
arr[1].position = 0;
obj = DER.parse(arr[1]);
if(obj is Array)
{
arr = obj as Array;
return new RSAKey(arr[0],arr[1]);
}
return null;
}
return null;
}
Par exemple sur " obj:* " c'est pour n'importe qu'elle type ?
Donc il prendra le type de la valeur qu'on lui attribue ?
Et dans le DER.Parse,
Code
Cliquez pour révéler
Cliquez pour masquer
public static function parse(der:ByteArray, structure:* = null) : IAsn1Type
{
var type:int = 0;
var len:int = 0;
var b:ByteArray = null;
var count:int = 0;
var p:int = 0;
var o:Sequence = null;
var arrayStruct:Array = null;
var s:Set = null;
var bs:ByteString = null;
var ps:PrintableString = null;
var ut:UTCTime = null;
var tmpStruct:Object = null;
var wantConstructed:Boolean = false;
var isConstructed:Boolean = false;
var name:String = null;
var value:* = undefined;
var obj:IAsn1Type = null;
var size:int = 0;
var ba:ByteArray = null;
type = der.readUnsignedByte();
var constructed:Boolean = (type & 32) != 0;
type = type & 31;
len = der.readUnsignedByte();
if(len >= 128)
{
count = len & 127;
for(len = 0; count > 0; )
{
len = len << 8 | der.readUnsignedByte();
count--;
}
}
switch(type)
{
case 0:
case 16:
p = der.position;
o = new Sequence(type,len);
arrayStruct = structure as Array;
if(arrayStruct != null)
{
arrayStruct = arrayStruct.concat();
}
while(der.position < p + len)
{
tmpStruct = null;
if(arrayStruct != null)
{
tmpStruct = arrayStruct.shift();
}
if(tmpStruct != null)
{
while(tmpStruct && tmpStruct.optional)
{
wantConstructed = tmpStruct.value is Array;
isConstructed = isConstructedType(der);
if(wantConstructed != isConstructed)
{
o.push(tmpStruct.defaultValue);
o[tmpStruct.name] = tmpStruct.defaultValue;
tmpStruct = arrayStruct.shift();
continue;
}
break;
}
}
if(tmpStruct != null)
{
name = tmpStruct.name;
value = tmpStruct.value;
if(tmpStruct.extract)
{
size = getLengthOfNextElement(der);
ba = new ByteArray();
ba.writeBytes(der,der.position,size);
o[name + "_bin"] = ba;
}
obj = DER.parse(der,value);
o.push(obj);
o[name] = obj;
}
else
{
o.push(DER.parse(der));
}
}
return o;
case 17:
p = der.position;
for(s = new Set(type,len); der.position < p + len; )
{
s.push(DER.parse(der));
}
return s;
case 2:
b = new ByteArray();
der.readBytes(b,0,len);
b.position = 0;
return new Integer(type,len,b);
case 6:
b = new ByteArray();
der.readBytes(b,0,len);
b.position = 0;
return new ObjectIdentifier(type,len,b);
default:
trace("I DONT KNOW HOW TO HANDLE DER stuff of TYPE " + type);
case 3:
if(der[der.position] == 0)
{
der.position++;
len--;
}
case 4:
bs = new ByteString(type,len);
der.readBytes(bs,0,len);
return bs;
case 5:
return null;
case 19:
ps = new PrintableString(type,len);
ps.setString(der.readMultiByte(len,"US-ASCII"));
return ps;
case 34:
case 20:
ps = new PrintableString(type,len);
ps.setString(der.readMultiByte(len,"latin1"));
return ps;
case 23:
ut = new UTCTime(type,len);
ut.setUTCTime(der.readMultiByte(len,"US-ASCII"));
return ut;
}
}
Quand on parle de Array ("is Array", "as Array") a chaque fois c'est la class array ou un type d'array (short[], in[]...) ?
Si oui comment savoir c'est qu'elle type ?
Merci ! :)