from crypt import crypt
import os

def prd_string_checksum(s):
    sum = 0
    state = ord(s[0])
    for i in s:
        state = 1103515245 * state + 12345
        b = (state >> 16) & 0x7fff
        sum += ord(i) * b
    return sum

def svr4_chksum(data):
    sum = 0
    for c in data:
        sum += ord(c) & 0xffff
    sum = ((sum & 0xffffffff) >> 16) + (sum & 0xffff)
    sum = (sum >> 16) + (sum & 0xffff)
    return sum    

prds = [("SINIX-BASE", "5.42"), ("SINIX", "5.40")]

farchives = []

os.system("rm -rf out_data")
for i in ["out_data", "out_data/reloc", "out_data/reloc/$LEGIT"]:
    os.mkdir(i)

filelist = []

pkginfo = """PKG=KeyInfo
NAME=SNI Software Authorization Files (Key Infos)
VERSION=1.0
VENDOR=SIEMENS NIXDORF INFORMATIONSSYTEME AG
CATEGORY=system
LOAD=08
CLASSES=none
MAXINST=33000
PRODUCTS=/etc/.products
LEGIT=/etc/.products/.legit
ARCH=i386 
PSTAMP=uevs35941122154908
"""

print(svr4_chksum(pkginfo))

f = open("out_data/pkginfo", "w")
f.write(pkginfo)
f.close()

for i in prds:
    s = prd_string_checksum(i[0] + i[1] + "D10pbfm0071991216")
    b = str(s + 1)
    csum = crypt(b, "pb")
    content = f"{i[0]}:SA=SINIX:SV=1:SS=DU-VE-PC-PG-LN-UL:DU={i[0]}:VE={i[1]}:PC=D:PG=10:LN=pbfm00719912:UL=16:PW={csum}"
    content += "\n# Copyright (c) 1990 Siemens Nixdorf Informationssysteme AG\n"
    f = open(f"out_data/reloc/$LEGIT/{i[0]}", "w")
    f.write(content)
    f.close()
    filelist.append((i[0], content))

print("1 d none $LEGIT 0755 root root")
for i in filelist:
    print(f"1 f none $LEGIT/{i[0]} 0644 root other {len(i[1])} {svr4_chksum(i[1])} 785519348")
print(f"1 i pkginfo {len(pkginfo)} {svr4_chksum(pkginfo)} 785519348")