HMAC-sigill som aldrig godkänns (PHP)
Jag tror att jag behöver andra ögon på det här problem.
Så här är läget:
Vi har ett fixat ett eget system för autogirohantering som bättre passar oss än de generella affärssystemen. Den biten funkar utmärkt när vi kört ett längre test med manuell uppladdning till banken via internetbanken.
Så nästa steg i projektet var att automatisera överföringen fram och tillbaka med SFTP och allt där funkar också utom en detalj, HMAC-sigillet.
Jag håller på att bli tokig av leta information över vad jag kan ha gjort för fel och i just denna fråga är inte Bankgirot så behjälpligt heller. Så jag får testa mig fram och invänta svar på varje enskild testfil som kan ta evigheter och oftast innehåller följande:
"Anledning till att filen har makulerats: Filen är sigillerat med rätt nyckel men något i filen stör beräkningen av sigillet."
Filens sigill skapas såhär:
$test = "00220322HMAC
0120220317AUTOGIRO 2222220001111111
0300011111110000000003074887
0300011111110000000009198973 ";
$key = "1234567890ABCDEF1234567890ABCDEF";
$key = hex2bin($key);
file_put_contents('BFEP.IAGZZ.K0222222.D220322T175608.txt', $test);
$kvv = strtoupper(hash_hmac('sha256', '00000000', $key));
$kvv = substr($kvv, 0, 32);
$sig = strtoupper(hash_hmac('sha256', $test, $key));
$sig = substr($sig, 0, 32);
$string = "99" . date('ymd') . $kvv . $sig . addSpace(8);
file_put_contents('BFEP.IAGZZ.K0222222.D220322T175608.txt', $string, FILE_APPEND);
addSpace = funktion för att fylla ut rader med mellanslang
$kvv = verifiering att rätt nyckel används med godkänt resultat från Bankgirot
$sig = sigillet för innehållet som då inte är godkänt
$string = datum, verifiering och sigill ihopslaget
Referenserna jag använt mig av för detta:
https://www.bankgirot.se/globalassets/dokument/tekniska-manua...
https://www.bankgirot.se/globalassets/dokument/tekniska-manua...
Jag har testat med onlinebaserade HMAC-generatorer och får exakt samma resultat som det som skapas från PHP:s hash_hmac() (eller hash_hmac_file() ) med testnyckeln.
Jag har testat att använda radslut från Linux och Windows samt med och utan CRLF.
Jag har frågat Bankgirot om exempelfiler som har ett korrekt uträknat sigill men det är den enda typen av exempelfiler de inte har.
Det ska vara en massa tomrum och sådant i filen då alla rader ska vara 80 tecken långa och just denna bit har jag dubbelkollat att det inte är för mycket eller för lite mellanslag någonstans (vilket jag ser försvinner här, men det spelar mindre roll).
Vi kör med en LAMP-server och Swedbanks SFTP-som detta skickas till misstänker jag kör Windows då den saknar Rsync för överföringen men att SCP funkar.
Testöverföringarna har nu gjorts med Filezilla.
Filer som förs över försvinner efter relativt kort stund men jag har inte kunnat se något uppenbart som Filezilla skulle kunna ha gjort under överföringen. När det går på automatik så förs det över via SCP.
Nu är väl detta långt nog men jag försöker få med så mycket information som möjligt. Finns det något uppenbart jag missat eller har någon kanske till och med pyssla med HMAC-sigill för överföring till banken?
Tacksam för svar!