[HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Anregungen & Feature Requests
User avatar
Arne.F
Core Developer
Core Developer
Posts: 8516
Joined: May 7th, 2006, 8:57 am
Location: BS <-> NDH
Contact:

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by Arne.F » January 15th, 2019, 8:32 am

-r und --rng-dev ist der gleiche Parameter und es ist nur einer davon erlaubt, daher die Fehlermeldung.

Versuch mal ob du in deiner extra rules Datei einen zweiten Symlink namens hwrngtty anlegen kannst damit das script nicht geändert werden muss.

ATTRS{serial}=="XXXXXXXXXX", SYMLINK+="hwrngtty"
Arne

Support the project on the donation!

Image

Image

Image
PS: I will not answer support questions via email and ignore IPFire related messages on my non IPFire.org mail addresses.

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » January 15th, 2019, 12:55 pm

Arne ich kann dir nicht folgen...

- Warum sagst du es gebe -r und --rrng-dev ? Das steht da überhaupt nicht drin, weder das eine noch das andere

- Der HWRNG hat bereits ein eigenen Synlink, er lautet "prg310"..

Grüße

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » February 20th, 2019, 1:04 pm

Rückmeldung zu Core 127. Der HRNG hat nun Vollständig sein Dienst eingestellt... ich bekomme Ihn nicht mal teilweise zum laufen.

Für mich sieht es so aus das dass die Script /scripts/hwrng/prg310.sh oder /scripts/hwrng/startp310 geändert werden müssen, diese laufen nicht mehr. Das übersteigt mein Wissen allerdings bei weitem

Sehr Ärgerlich

Lux73
Posts: 34
Joined: January 31st, 2017, 5:40 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by Lux73 » April 8th, 2019, 12:39 pm

@ BetaTester

hast du zufällig eine APU in Einsatz? Nachdem ich heute mein BIOS auf v4.0.25 upgedatet habe funktioniert auch wieder der PRG310!

Vorher gab es beim booten Probleme mit dem starten des udev - BIOS vorher war 4.0.23...
IPFire 2.23 (x86_64) - Core Update 136 | RGBO
APU2c4 Bios 4.0.27|mSATA i530 120GB|Compex WLE600-VX@ac|PRG310-51

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » April 8th, 2019, 12:40 pm

Ich nutze eine ältere IPFire Eco Appliance...

Lux73
Posts: 34
Joined: January 31st, 2017, 5:40 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by Lux73 » April 8th, 2019, 12:43 pm

dann würde ich mal schauen bzgl BIOS Update - evtl gibts da ja auch was...
IPFire 2.23 (x86_64) - Core Update 136 | RGBO
APU2c4 Bios 4.0.27|mSATA i530 120GB|Compex WLE600-VX@ac|PRG310-51

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » June 11th, 2019, 6:40 pm

Also vor allem für mich selbst eine Aktualisierte "Anleitung" wie ich den PRG310 unter Core132 auf einer Eco Appliance zum laufen bekommen habe.

Wenn es noch jemanden hilft freut mich das...

Das Start Script unter /scripts/hwrng/startp310 musste angepasst werden

Code: Select all

#!/bin/bash
/usr/bin/logger P310 - HWRNG detected
/usr/bin/logger P310 - setup stty
/bin/stty raw -echo -ixoff -F /dev/hwrngtty speed 921600 > /dev/null
/usr/bin/logger P310 - execute start command
/bin/echo 4b > /dev/hwrngtty
Das Script für "/scripts/hwrng/prg310.sh" muss angelegt werden

Code: Select all

#!/bin/bash
#title           : prg310.sh
#description     : handling PRG310 random device
#author          : firefriend
#date            : 2015-02-12
#version         : 1.0    
#usage		 : bash prg310.sh <rng device, e.g. hwrngtty>
#notes           : 
#bash_version    : 
#==============================================================================

PATTERN0="PRG310"
PATTERN1="0000000: 00 ."
PATTERN2="0000000: 55 U 0000001: 05 ."
PATTERN3="0000000: 34 4"
PATTERN4="rngd is running with Process ID(s)"

if [ $1 == "hwrngtty" ]
then
 COMMAND="logger" #using logger
else
 COMMAND="echo"
fi

REPEAT=1
COUNTER=0

$COMMAND "PRG310 - #### "$1" ####"
$COMMAND "PRG310 - starting deadman"

#test for existing dev
DIR="/dev/"$1
if [ ! -L "$DIR" ]
then
  $COMMAND "PRG310 - error "$DIR" not available"
  exit 1
fi

$COMMAND "PRG310 - "$DIR" available"

if [ $1 == "hwrngtty" ]
then
  /etc/init.d/rngd stop > /dev/null
  RESULT=$(/etc/init.d/rngd status)
  case "$RESULT" in
    *$PATTERN4*) $COMMAND "PRG310 - rngd didn't stopped - retry"
                 REPEAT=1;;
    * ) $COMMAND "PRG310 - rngd stopped"
               REPEAT=0;;
  esac
fi

### raw     : same as -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
###                   -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel
###                   -opost -isig -icanon -xcase min 1 time 0
### -echo   : disable to echo input characters
### -cstopb : use one stop bits per character
### crtscts : enable RTS/CTS handshaking (disables DTR/DSR)
### pass8   : same as -parenb -istrip cs8
###           cs8     : 8 data bits
###           -parenb : generate (no) parity bit in output and expect parity bit in input
###           -istrip : don't clear high (8th) bit of input characters
### min 0   : with -icanon, set N (0) characters minimum for a completed read
### time 10 : timeout after 1s

RESULT=$(stty raw 921600 crtscts -cstopb pass8 -echo min 0 time 10 -F /dev/$1)
RESULT=$(echo $RESULT) #remove non-printable character
LEN=${#RESULT}
$COMMAND "PRG310 - result set serial port via stty:" "$LEN" "$RESULT"

# stop random generation
echo -n "e" > /dev/$1 & RESULT=$(xxd -l1024 -c32 /dev/$1) # stop random generation, flush buffer
RESULT=$(echo $RESULT) #remove non-printable character
LEN=${#RESULT}
#$COMMAND "PRG310 - result stop command:" "$LEN" "$RESULT"

# data transmission disabled? 
RESULT=$(xxd -l16 -c16 /dev/$1) # try to read 16 random bytes
RESULT=$(echo $RESULT) #remove non-printable character
LEN=${#RESULT}
$COMMAND "PRG310 - result test transmission:" "$LEN" "$RESULT"

if [ $LEN != 0 ]
then
  $COMMAND "PRG310 - data transmission didn't stop"
  exit 1
fi

$COMMAND "PRG310 - random generation stopped"

# check version
echo -n "v" > /dev/$1 & RESULT=$(xxd -l32 -c32 /dev/$1) 
RESULT=$(echo $RESULT) #remove non-printable character
LEN=${#RESULT}
$COMMAND "PRG310 - result read version:" "$LEN" "$RESULT"

if [ $LEN != 85 ] # check length
then
  $COMMAND "PRG310 - version string length not as expected"
  exit 1
fi

# check for correct version content
case "$RESULT" in # check return value
     *$PATTERN0*) $COMMAND "PRG310 - version checked - RNG is a PRG310";;
              * ) $COMMAND "PRG310 - version didn't fit - RNG is not a PRG310"
                  exit 1;;
esac

#check error counter
echo -n "f" > /dev/$1 & RESULT=$(xxd -l1 -c1 /dev/$1)
RESULT=$(echo $RESULT) #remove non-printable character
LEN=${#RESULT}
$COMMAND "PRG310 - result read error counter:" "$LEN" "$RESULT"

if [ $LEN != 13 ]
then
  $COMMAND "PRG310 - return length error counter not as expected"
  exit 1
fi

case "$RESULT" in
     *$PATTERN1*) $COMMAND "PRG310 - error counter is zero";;
     * ) $COMMAND "PRG310 - error counter isn't zero - start selftest"
	 #execute self test
         until [ "$REPEAT" == 0 ]
         do
           let COUNTER++ # increment loop counter

	   # exit if selftest failed 10 times
	   if [ $COUNTER -gt 10 ]
	   then
             $COMMAND "PRG310 - error selftest not executable - abort"
             exit 1
      	   fi

      	   # execute selftest
	   echo -n "t" > /dev/$1 & RESULT=$(xxd -l2 -c1 /dev/$1)

	   RESULT=$(echo $RESULT) #remove non-printable character
      	   LEN=${#RESULT}
      	   $COMMAND "PRG310 - result selftest:" "$LEN" "$RESULT"
      
      	   if [ $LEN != 27 ]
           then
             $COMMAND "PRG310 - length return value selftes not as expected"
             exit 1
      	   fi

      	   # check result - status
      	   case "$RESULT" in
                *$PATTERN2*) $COMMAND "PRG310 - selftest passed"
                             REPEAT=0;;
                * ) $COMMAND "PRG310 - selftest not passed - retry"
                    REPEAT=1;; # enter retry loop
           esac
         done;;
esac

# setup random function
echo -n "4" > /dev/$1 & RESULT=$(xxd -l1 -c1 /dev/$1)
RESULT=$(echo $RESULT) #remove non-printable character
LEN=${#RESULT}
$COMMAND "PRG310 - result set random function:" "$LEN" "$RESULT"

if [ $LEN != 13 ] # check length
then
  $COMMAND "PRG310 - return length set random function not as expected"
  exit 1
fi

case "$RESULT" in # check return value
     *$PATTERN3*) $COMMAND "PRG310 - setup random function accepted";;
              * ) $COMMAND "PRG310 - setup random function not accepted"
                  exit 1;;
esac

# start random generation again
echo -n "b" > /dev/$1 # start random generation

# data transmission enabled?
RESULT=$(xxd -l16 -c16 /dev/$1)
RESULT=$(echo $RESULT) #remove non-printable character
LEN=${#RESULT}
$COMMAND "PRG310 - result enabling data transmission:" "$LEN" "$RESULT"

if [ $LEN != 65 ]
then
  $COMMAND "PRG310 - random generation didn't start"
  exit 1
else
  $COMMAND "PRG310 - random generation is active"
fi

# start and check for running rngd
if [ $1 == "hwrngtty" ]
then
  /etc/init.d/rngd start > /dev/null 
  RESULT=$(/etc/init.d/rngd status)
  RESULT=$(echo $RESULT) #remove non-printable character
  LEN=${#RESULT}
  case "$RESULT" in
    *$PATTERN4*) $COMMAND "PRG310 - rngd started"
                 REPEAT=0;;
    * ) $COMMAND "PRG310 - rngd didn't started - retry"
        REPEAT=1;; # enter retry loop
  esac
fi

$COMMAND "PRG310 - deadman successfully executed" 

exit 0
Die beiden Scripts nun mit "chmod+x" ausführbar machen

Das file "/etc/udev/rules.d/90_ftdi_hwrng.rules" muss angelegt werden

Code: Select all

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="XXXXXXXX", SYMLINK+="hwrngtty", RUN+="/scripts/hwrng/startp310"
Info: Das "XXXXXXXXXX" in ATTRS{serial}=="XXXXXXXXXX", muss durch die Seriennummer des Generators ersetzt werden. Herraus bekommt man die Seriennummer mit dieser Zeile code:
CODE: SELECT ALL

Code: Select all

udevadm info -a -p $(udevadm info -q path -n ttyUSB0) | egrep -i "ATTRS{serial}|ATTRS{idVendor}|ATTRS{idProduct}" -m 3
Crontab Job erstellen

Code: Select all

export EDITOR=/usr/bin/nano
Crontab mit nano Öffnen

Code: Select all

fcrontab -e
Am ende der Liste dies einfügen

Code: Select all

# HWRNG USB310
*/10 * * * * /#pfad/prg310.sh hwrngtty
Nun noch die beiden Dienste Neustarten

Code: Select all

/etc/init.d/udev restart
/etc/init.d/rngd restart
IST NOCH IN BEARBEITUNG
Last edited by BetaTester on September 25th, 2019, 3:59 pm, edited 5 times in total.

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » June 12th, 2019, 1:48 pm

Kann gelöscht werden

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » September 25th, 2019, 8:46 am

Info: Mit Core 134/135 ist der HWRNG wieder ohne Funktion...

Code: Select all

[root@ipfire hwrng]# ./prg310.sh 
./prg310.sh: line 18: [: ==: unary operator expected
PRG310 - ####  ####
PRG310 - starting deadman
PRG310 - error /dev/ not available
[root@ipfire hwrng]# 
In Line 18 steht:

Code: Select all

if [ $1 == "hwrngtty" ]

User avatar
Arne.F
Core Developer
Core Developer
Posts: 8516
Joined: May 7th, 2006, 8:57 am
Location: BS <-> NDH
Contact:

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by Arne.F » September 25th, 2019, 3:44 pm

Wenn $1 leer ist, das script also ohne Parameter gestartet wurde ergibt Zeile 18
if [ == "hwrngtty" ]
was der Vergleischoperator nicht mag.
Die Zeile müsste
if [ "$1" == "hwrngtty" ]
sein damit sie auch mit leerem Parameter klarkommt. Ob die Logik dann richtig ist hab ich nicht geschaut.

Auf Jedenfall ist im oberen Post das Device in der Chrontab falsch. Das müsste auch hwrngtty und nicht nur hwrng sein.

Ich wüsste auch nicht das am "Udev" oder dem "rngd" in core 134 oder 135 was geändert wurde daher versteh ich nicht wiso das vorher ging.
Arne

Support the project on the donation!

Image

Image

Image
PS: I will not answer support questions via email and ignore IPFire related messages on my non IPFire.org mail addresses.

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » September 25th, 2019, 4:05 pm

Ich habe die beiden vorgeschlagenen Änderungen einmal gemacht, ich konnte leider keine Veränderung feststellen. Laut Statistik hat der HWRNG um den 27 August den Betrieb eingestellt, das letzte mal Sicher hat es mir Core 132 funktioniert. Hier habe ich die obige Anleitung zusammen getragen.
[root@ipfire hwrng]# ./prg310.sh
PRG310 - #### ####
PRG310 - starting deadman
PRG310 - error /dev/ not available
[root@ipfire hwrng]#
Der Ursprüngliche Autor des Scripts ist leider nicht mehr Aktiv wie es absieht.

frickelpit
Posts: 297
Joined: April 18th, 2011, 7:34 am

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by frickelpit » September 26th, 2019, 7:35 am

Falls du eine APU benutzt, mach ein Firmware-Update. Hat bei mir auch geholfen, seitdem funktioniert das wieder.

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » September 26th, 2019, 7:40 am

Ich habe eine Eco Appliance (2005er) vom TX-Team, hier gibt es soweit mir bekannt kein Firmware Update.

BetaTester
Posts: 172
Joined: November 14th, 2018, 3:04 pm

Re: [HOWTO] Einbindung HW Zufallszahlengenerator PRG310

Post by BetaTester » September 26th, 2019, 9:15 am

Interessant, ich habe die Box heute einmal außerplanmäßig Neugestartet da ich FW einstellungen geändert habe.

Nun läuft der HWRNG wieder, Status Grün

Post Reply