#scene.no MD5 C-compo --------------------- Oppgave: Lag et C-program som leser inn input fra stdin skriver ut md5-hashen til stdout. Eksempel: $ printf "The quick brown fox jumps over the lazy dog" | md5-sample 9e107d9d372bb6826bd81d3542a419d6 Ressurser: - https://en.wikipedia.org/wiki/MD5 - https://tools.ietf.org/html/rfc1321 Filer: - md5-rules.txt - md5-sample.c Windows: stdin på Windows er default i text-mode, noe som fører til krøll for binære data. For å sette den til binær mode, se https://msdn.microsoft.com/en-us/library/tw4k6df8.aspx Hvis du utvikler på Windows må du levere en versjon uten _setmode() (og helst teste den på f.eks Linux før du leverer). Dette kan f.eks gjøres på https://eval.in. Regler: - Det er ingen begrensning på inputstørrelsen - Hashen skal skrives ut som et 16-siffers hex-tall i lowercase, etterfulgt av linjeskift. - Det er ingen krav til hastighet. Generelle regler: - Programmet skal skrives i C. - Koden skal kompilere og kjøre korrekt med gcc4 på Linux og OS X. - Programmet skal kompilere og fungere både på big- og little-endian-maskiner. - Programmet skal kompilere og fungere både på 32- og 64-bits arkitekturer. - Programmet skal kunne kjøre på hvilken som helst CPU som tilfredstiller resten av reglene. - All output skal sendes til stdout med mindre det spesifisert noe annet - Programmet skal returnere *eksakt* det samme som eksempelprogrammet, også ved feil. Returverdien fra main() skal også være den samme som i eksemplet. - Inline assembler er ikke tillatt. - Programmet skal kompileres slik: - cl program.c (visual c) - gcc program.c -lm -o program (gcc) - Det er ikke lov å kjøre eksterne programmer fra programmet. - Warnings er selvsagt tillatt, og oppfordres. - Hvis det er en konflikt mellom oppførselen definert i reglene og oppførselen i eksempelprogrammet er det eksempelprogrammet som gjelder. Det er fint om folk sier i fra om dette slik at reglene kan bli oppdatert. - Hvis en funksjon (også main()) skal returnere en verdi kan man *ikke* anta at en manglende return fører til at funksjonen returnerer 0. - Programmet kan anta at globale, uinitaliserte variabler blir initalisert til 0 (de havner i bss). - Programmet kan ikke anta hva uinitialiserte variable på stacken er, og skal heller ikke anta hvilke rekkefølge variabler ligger i (dvs ingen smarte buffer under/overflow-triks). - Programmet skal ikke gjøre noe mer enn det som er spesifisert i oppgaven. - Bidrag som bryter en eller flere av reglene kan bli diskvalifisert.