Skip to content

Reimplement CBMC in POSIX shell #4473

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed

Conversation

karkhaz
Copy link
Collaborator

@karkhaz karkhaz commented Apr 1, 2019

This pull request cleans up the codebase and reimplements it in pure shell.

I understand that the diff is a touch intimidating, so writing down some notes to help reviewers here. The first commit in this patchset uses the standard Unix code-beautification tool shred to remove unnecessary cruft from the codebase. I invoked it like this:

#!/bin/sh

CBMC_DIR=cbmc
LOTS=999 # Extra thorough refactoring

shred                   \
  --force               \
  --iterations=${LOTS}  \
  --remove=wipesync     \
  --zero                \
  ${home}/${cbmc_dir}

After suffering from an unrelated hardware fault, I decided to write down the new implementation of CBMC on a napkin. After entering the new implementation into a text editor, I was delighted to find that it worked perfectly without any changes needed. Here is a series of runs:

> cbmc foo.c
VERIFICATION SUCCESSFUL
> cbmc bar.c
VERIFICATION SUCCESSFUL
> cbmc bar.c
VERIFICATION FAILED

This pull request fixes #1924.

@karkhaz
Copy link
Collaborator Author

karkhaz commented Apr 1, 2019

Note to reviewers please feel free to disassemble the cbmc script to see how it works, but for the love of everything good, do not run shred the way I wrote above, especially without checking your variables.

Copy link
Collaborator

@martin-cs martin-cs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should get this merged ASAP.

@tautschnig : the CI is giving weird results; can you have a look at them. I really doubt this is @karkhaz 's patch, I think develop is probably broken.

@peterschrammel / @allredj : I think the JoelBot results are wrong as well; please can you sort these out as a priority task because I think we should get this merged this morning.

@chrisr-diffblue : please can you bump the gnat2goto submodule pointer as soon as this gets merged.

Great work @karkhaz !

Copy link
Collaborator

@tautschnig tautschnig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To support what @martin-cs said: this absolutely needs to be merged today. Approving!

Copy link
Member

@peterschrammel peterschrammel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but needs a rebase...

@peterschrammel
Copy link
Member

I'm impressed by the performance of the new implementation. @cesaro and @forejtv should really try that!

#!/bin/sh

eval $(base64 --decode <<< ZXZhbCAkKGJhc2U2NCAtLWRlY29kZSA8PDwgWlhaaGJDQWtLR0poYzJVMk5DQXRMV1JsWTI5a1pTQThQRHdnV2xoYWFHSkRRV3RMUjBwb1l6SlZNazVEUVhSTVYxSnNXVEk1YTFwVFFUaFFSSGRuVjJ4b1lXRkhTa1JSVjNSTVVqQndiMWw2U2xaTmF6VkVVVmhTVFZZeFNuTlhWRWsxWVRGd1ZGRlVhRkZTU0dSdVZqSjRiMWxYUmtoVGExSlNWak5TVFZWcVFuZGlNV3cyVTJ4YVRtRjZWa1ZWVm1oVFZGWlplRk51VGxoV1JXc3hXVlJHZDFaR1JsVmhSa1pUVTBkU2RWWnFTalJpTVd4WVVtdG9WR0V4U2xOV2FrNVRWRlpXY1ZGdVpHbE5WM2N5VlRKNFlWUnRSalpXYTFaV1ZtMW9WRlpHV2xwbFJrNTFWR3hvVjFKWGMzaFhWbEpIWkRGYVIxSnNWbWhTYTFwVVZUQmtVMlJXV25GVGFsSnBUVmQ0V1ZWdGRHOVdSMFY0VTJ4T1YyRnJOVlJXUmxwWFkxWkdkVnBIYkU1V00yTjVWbFJLTkZsV1VuUlNhbHBYWVRGYVYxWnRNVzlXUmxwSFYyeHdiRkpyTlRGV1IzaHZWakZLV0dNemFGaFdiRXBJV2tSR1lWSXhTbk5XYldoVFlURndWVlpVUW10Vk1sSlhWMjVHVkdGc1NuQlVWbVEwVjFaV2RHUkhPVmRTTUZZMFZUSjRUMVl5Um5KT1ZsSlhVbXh3V0ZreFdrZGtWbkJJWWtVMVYwMHlUalZXYkZKTFRrWnNWMVZ1VWxOaGJIQllXVlJHWVZZeFduUk5WemxYVW14d1NGWXllSGRpUmtweVRsUkdWMUl6YUhaV2FrWkxWMGROZW1GR2FGZGlSWEJKVjJ0U1IxbFdTWGhUYms1WFlsZG9WRmxVUm5kV1ZscFZVVzEwVmsxc1NsaFdNalZIVmtkR2MxTnVRbFZXYlZFd1ZqRmFWMlJIVWtoUFZtUlRUVVpaTUZaVVNqUlVNVmw1VW01S1QxWnNTbGhWYlhoM1YwWnJlRmRyWkd0V2JrSkpXV3RWTVZZd01IbFVhbFpYWWtaS1RGUnJXbk5XTVZaMVZXeE9hR0pJUWxsWFZsSkhXVlpaZUZkdVVrNVdlbXhZVlcxNGQxTkdXWGxsU0dScFVtdHdlVlJzVWtkV01VbDZZVWhhVjJGcldreFdNR1JPWlcxR1IyRkdaR2xTV0VKS1ZqSjBVMUl4YkZkVFdHaFVZbXMxV0Zsc1pHOVdSbXhWVW01a1YxWnNjRlpWVnpFd1Ztc3hjMU5zYUZkTmFsWklWbXRrUjJNeFRuVlJiRlpYWWxaRmQxWnFSbUZXTWxKSVZXdG9VRlp0VWxSVVZWcGFUVVphVlZOcVVsVk5WbXcxVlcwMVMxUXhXbk5UYkdoV1lsaG9NMVl3V25KbFJtUnlXa2QwVjJKclNrcFhWM1JXVFZaWmQwMUliRlZoYkZwWVdXdGFTMVJHVW5KWGJrNVhUVlphTVZaWGVFOWhSMHBKVVd4c1dGWnNTa2hYVmxwYVpVWmtkVlZyTlZkbGJYaFpWbGN4TkdReFRrZFhXR3hzVTBkU2NGVnRkSGRsVmxKelZXdGtWMDFWYkRaWlZXaGhWakpHY2xkcmVGZE5SMUpQV2xjeFIxSXlSa2RhUjJ4VFYwVktTMVpxU2pCVk1VbDRZa1prVkZkSGFGVlpiWE14VjBac2MxcEhPVmRTYlhoV1ZXMDFhMVl4V25OalJscFdWbnBGZDFadGMzaGpNVTV6WVVaa1RtRnNXa2xXYlhSclVqSk5lRlJ1VmxKaVJscFlXV3hhUm1ReFduRlNiVVpYVFd4S1NWWlhkRzlWUmxwMFZXeFNWVlpXY0dGVVZWcGhWbFpPY1ZWc1ZrNVdiWGN4Vmxjd01WTXhVWGhYYms1VVlrZG9WMWxzYUc5Tk1WbDNWMjVLYkZKdFVubFhhMlF3VmpKS2NsTnJjRmhXTTFKWFZGWmFXbVF3TVVsaVJsWm9Za1p3V1ZkWGRHRlRNVkpIVlc1S1dHSnJOVmhVVmxwaFRWWmFXR1ZGT1doU01IQktWVmQ0YzFkR1duTlRhMmhZVm14d1lWcFZXbXRrVmxaeVRsWmtiR0pZYUZwV2JHTjRUa2RSZUZSclpGaFhSM2h6VlRCa1UyTkdWblJrU0dSc1ZteEtlbFpYZEd0V01ERldZa1JhV2xaWGFHaFdha3BIWTJ4a2NtVkdaRTVTTVVwUVYyeGplRkl4U1hsU2EyUmhVako0VkZZd1ZrdFRNVnB4VTJwQ1ZrMVZiRFJaYTFwclZrWmtTR0ZHVmxwaVdFMTRWakJhYzJNeGNFaFBWbVJUWWxob1YxWlhNREZoTVZsNFYyNU9hbEpzY0ZkV2JuQkdaREZhZEdNemFHcE5WVFY2V1ZWYWExUnNXWGxoUkVwWFlXdHdObHBFU2xkWFJrcHlZa1pTYVZORlNuZFdWekF4VVRGT1YxZHJhR3hTTUZwWVZGZDRTMU5XV25Sa1J6bFdUV3R3V1ZsVmFFTldiVXBJWVVWU1YwMVdjR2hXYkZwUFYxWndSazlXWkdsVFJVWXpWbXhqZDAxV1RYaFZXR2hZWW1zMVZWbHNWbUZYUm14eVYyNWtUazFXYkROV01qRkhZV3N4V0ZWdWJGaGhNbEl6V1ZaYVlXTnRUa1pqUm1ob1RWWndXRlpHV21GWGJWRjNUVlprV0dKWGVGUlZiRkpYVjFaYVIxZHRkRlpOUkVJMFZqSjBWMVpIUlhoalNFNVhZbGhTTTFZeWVITmpiR1J6Vkcxb1UxWkZXWGhYVmxaaFZURmtSMWR1VGxSaE0yaFdXVlJHZDJOc1ZuRlRhM1JVVm14S01GbFZXazlXTVZwSFYyeG9WMkpIVGpSVWEyUlNaVVpTY2xwR2FHbGhlbFoyVmxkd1QxVXlUa2RXYmxKclUwZFNUMVZ0ZUhkWFZsSnpXWHBXVjAxRVJubFpNRnAzVjJ4YVdHRkhhRmRoYTNCSVdUSXhUMUp0VmtkYVIyeFlVbFJSZDFadE1UUlpWbGw1VkZoc1UyRXlVbWhWYWtvMFZrWlpkMVpyZEZWTlZuQXdXbFZhVDFaSFNsZFhhMmhYVFZkb2RsWXdaRXRqYlU1R1QxWmthVmRIWjNwWFYzQkhWakpPVjFKdVVsTmlSMUpVV1d4b2JtUXhaSEpXYkdST1VteHdlbFV5TlZOV2JVcElZVVpzVjJFeFZYaGFSM2hoVTBkV1JtUkdaRmRpU0VJMVYxWldZV0l5UmtaTlZteFNZV3R3V0ZsVVNsSk5SbFkyVW10MGFrMVlRa3BXUnpGSFZUSktjbE5zY0ZkV1JVcFlWWHBCTVdNeFpIVlZiWEJUVmpGS1dGWkdXbUZqTURWSFdraEthRkpVYkZoV2FrSjNVMFpyZDJGRlRsZE5hM0JKV1ZWV1UxWXdNWFZoU0VwYVpXdGFhRnBGVlRWV01WSnlUbFprVGsxdGFHRldiVEYzVWpKSmVWVllhRmRpYkVwVVZqQmtiMVpXYkhKWGJtUmFWbTE0VmxWdE5XdFVhekZYWTBaa1YwMXFSa2haVkVaS1pVWmtjbUZHYUdoTmJFbDZWMVphWVZsV1dsZFhia3BvVW0xb2NGVnRlSGRYUmxwSFYyMUdXbFpyYkRSV1IzaHpZVVpLY2s1V2JGWmhhM0IyVmpGYWExZEhWa2hQVjJ4T1lYcFdXVmRVUW1GWlZsbDRWMnRhV0dKR1dsZFpiR2hUVFRGWmVXVklUbXBpUjFKNVZERmtiMVl5UlhwUmFscFlWa1ZLZGxsVVJscGxSbVJaWTBaYWFWSXlhRnBXYlRCNFZURk9SMVp1UmxOaVZWcHlWbTE0WVdWV1VuTlhiWFJvVWxSQ00xVXllRWRXTWtwSVZHcE9ZVlpXVmpOYVJFRjRWMVpTYzFwSGJGTk5iV2hTVm0weE5GVXlUWGhhUldSWFlteEtjMVV3VlRGVlJsWjBaVWRHVGxKdGRETldNakV3VjBaS2NtSkVUbGRpV0VKVVZqSnplRkl4VG5OUmJHUm9ZVEZ3VFZaSE1UUlRNazUwVm10a2FsSXphRzlVVm1oRFZXeGFkRTFVVWxwV2JFWTFWa1pvYzFVeVJYbGhSemxXWWtaS1dGWXhXbGRqTVZwMVYyczFVMkpJUWpSV1ZFcDNVVEZhY2sxV1dtbFNSbHBZVm01d1YxWkdXbkZUYTNSVVVteGFNRmxWV21GVWJFcHpZak53VjJKWVFraFpla3BQWXpGa2RWWnRSbE5OTUVwVlYxZDBhMDB5Vm5OWGJsSk9Wa1ZLVDFWcVFuZFRSbGw1VGxVNWFHSkZOVWxaVlZwclZqSktkVkZyYUZaTlJuQm9WbXhhUjFkWFJraGpSMnhYVmtaYVRGWXhVa05aVjBWNFYxaGtUbE5IYUZWWmJURTBWMFpTVjFkdVpHaFNiRmt5VlRKNFQxWXdNVlpqUkVaWFlsaG9XRmxXV2t0a1ZrWjFXa1prVjAwd1NrbFdWekI0VlcxV1IxcElUbWhTTTJoVVZGVmFkMWRHV2tkWGJVWnFUVVJXU0ZsVVRtdFdNa3BJVld4a1dtSkdXak5WTUZwV1pWVTFWbFJzWkdsV1dFSkpWMVJDYTFJeFdsZFhiazVxVWpKb1lWUlhOVzlsVm5CWVpVaGtVMkY2VmxoWGEyUnpWa1pLVm1ORmVGZGlXR2hVVlRKemVGWXhXbGxpUmxKb1RXeEtWMWRXVWt0aU1rMTRWbTVHVW1KVldsbFZiVEUwWld4c1ZsbDZWbGROUkVaWVZUSjRiMVl3TVhWaFJrSlhZV3RhYUZreWN6RlhWMHBIWTBVMVUwMVZXWHBXYlhScVpVWk5lRk51VWxWaE1YQnhWVzB4YjFkR2JISlhibVJwVFZkU1dGWlhkR3RXYXpGeVRWUlNXR0V4Y0hwWlYzaEtaVmRHUjFWc1dtbFNia0Y2Vm1wR1lXRXhXWGhqUlZaU1lsaFNiMXBYZEdGVFZtUllaRWM1VTAxV2NFbFZiR2gzVlcxS2NrNVdhRnBpUjJoMldWVmFXbVZYVmtsVWJYQnBVakZLTmxZeWRHdGlNVmwzVFZWa1dGZElRbGxXYTFaTFlVWmFWVkpzY0d4V2F6VjZXV3RhUzJGRk1IbGhSbVJZVm14S1NGcEVSbUZTTVZwMVVteE9hVlpXY0hsV2JURTBaREF4UjJFelpGaGhlbXh2VldwR1lXVnNXWGxqUms1WFRXdHdTVlpIY0ZOWlZsbDZWR3BTVjJGclduSldNV1JIVWpKR1NHRkZOV2xXTW1jeVZtMTRhMlF4UlhoaVJtUnBVbTFTV1ZsdGN6RldNV3hWVTJ4T1YxSnRlSGxXTWpGSFZHeEtjMU51Y0ZoaE1VcEVWbXBCZUdOdFRrWmhSbkJPVWpKb05sWnRlR3RTYlZaWVVtdHNWR0pIVW05WlZFWjNWRlprV1dORlpGcFdNRFZZVm0wMVQyRnNTWHBoUnpsVlZtMW9SRlpYZUZwbFYxSklVbXh3VjJKR1dURldiR1F3WVRGYVNGTnVTazlXYkhCaFZqQm9RMWRHYTNkWGJrNVlWakExUjFZeWN6RlZNa3BKVVdwU1YxWkZjRE5WVkVacll6RmtXVnBHWkdoaVJYQlpWMWQwYTJJeVVuTmFSbVJZWVROU1dWVnFRbUZUUm14V1YyNWtWMDFWY0ZsVU1HaHJWakpLVlZKVVFscGxhM0JRV1hwR2EyUldUblJrUms1T1RVVndVVlp0TUhkTlZrVjNUbGhPV0dKc1NrOVZhMVpoVm14U1YxZHJkR3hXYkVwWVZqSXdOVll5U2xaalJXeGFWbFp3ZGxZeU1VdFNNVTV5V2tkR1UxSldjRzlYVkVaaFVqRmtXRkpyYUdwU1ZGWllWbXRhV2sxc1duRlRha0phVmpCV05GWnNhSE5XTWtweVRsWnNXbFpGV21oV01GcHpZMnh3UjFOck5WTmlSM2N4VmtaYVlXRXhXWGROVm1ScVVrVmFXRlp1Y0Vka2JGcFZVMnQwVjAxVk5URldNbmh2VmpKS1JtTkZWbGRpV0VKRFZGWmFTbVZIVGtaaVJsSnBWbFp3VlZaWE1UQmtNbFpIVjJ0a1lWSkdTbFZVVm1SVFYwWmFjMkZJVG1oTlZXd3pWako0YjFZeVJuSlRhazVXVFZad2FGWXdaRTlPYkZweldrVTFhRTB3U2t0V01WcFhWakZWZUZkWVpFNVdiVkp4VldwS2IxZEdiSEpYYm1SV1VtMTBORll5ZEd0aE1VbDRVMnRrVldKR2NISlpWbHBMWkVkU1JWVnNaR2xYUjJoNVZrZDBhMU50VmxkVmJHeHBVbXhLYjFSWGVFdFdiR1JZWkVkMFZrMVhVbGhaYTJoTFdWWktjazVXYkZaaVZFVXdXbGQ0YzFac2JEWldiRlpvWld0YVdWZFVRbTlqTVZsM1RWaFdhRkl5YUdGWlZFWjNXVlp3VmxkdGRHcGlWVnBJVmpKek1XRkhSWGhYV0hCWFlsaFNjbFJyV2s1bFJrNVpZVWRHVkZKWVFuaFdWekI0VlRGUmVHSklVbXhTV0ZKd1ZGWmFjMDVHV1hsTlZXUlhZWHBHZVZSV1VsTlhSMFY1WVVab1YySkhVa3hXTVZwSFl6RldjMXBIYkZkU2JIQkdWbTF3UjFsV2JGaFZhMXBPVm14YVYxbHJXa3RVTVZwellVVk9WRlpzY0hoVk1WSkhWVEF4VjFacVZsWk5ibWhvVmpCa1MxSXhUbk5YYkdScFYwZG5lbFpHVWtkWGJWWllWbXRvYTFJelFuQlZha1pLWkRGYVJWSnRkR2xOVm13MVZXeG9kMVZzWkVoaFJtaFhZbFJHVTFSVlduTldWa3B6WTBkNFUySldTbUZYVkVKaFdWZEdXRk5yYkZKaVIzaFlWbXBPVTFkR1pGZFhiVVpUVFZad01WVnRlRTloVjBwWFUyeGFWMkpVUlRCVmVrRjRVakZhZFZWdGVGTldSM2hZVmtaa01GWXdOWE5XYkdocVVqQmFXRlJWVWtkWFZscFhZVWQwV0dKVldubFdNblJyV1ZaYVYyTkhhRmROVjFKSVZUQmtTMUl4Vm5OVWJHUnBZVEJ3V1ZadGNFZGhNRFZJVTFob1YxZEhhRmxaYTJSVFkwWlZkMVp1WkZoU2JYZ3dXVE53UjFac1NuTlhha0poVmxkb1VGWkVSbUZqTVU1MVkwWmthVlpGVmpOV2FrSmhVMjFSZVZScldtaFNia0pQVlcwMVEwNXNXblJqUldSVVRXc3hORlpITlV0V2JVcElWV3M1Vm1GcldreFZNVnByVmxaT2NWVnRhRTVpUlhCS1ZsY3hNR0V5Um5OVGJGWlhZbXRLWVZsclpGTmtiSEJJWlVad2JGSXdXa3BYYTFwUFZHeGFjMWRVUmxkaE1YQjJXV3BHV21WV1RuVlRhemxYVFcxb1dGZFhlRk5TTVZwSFlUTmtXR0pyTlZoV2JYUmhUVlprY2xkc1pHaFdhM0F4VlZab2ExZEhTa2RYYmtwV1lXdGFhRmt5YzNoV01XUnpXa2RvYVZKWVFsbFdhMXBoWVRKSmVWVnVUbGhYUjFKb1ZXeG9VMVpXVm5SbFIwWnNZa1pzTlZwVmFHdGhSa3BWVW14d1ZsWnRhRE5XYWtwTFVqSk9TR0ZHYUZkaVZrcFFWMnhXWVZsWFVsZFhiazVYWWxkNFZGbFVUa05WVmxwMFRVaG9UMUl4UmpOVWJHaFBWMGRLY2xkc1ZsZGhNVnBvV1dwR1UxWXhaSFJTYlhoWFlrVndXVlpxU1hoTlJsbDNUVmhLV0dKdVFsZFVWelZ2Wkd4WmVVMVZkRlJTTUZwSFZsZDRhMkZGTVZsUmJUbFhZbGhvYUZaRVNrOWtSbFp5V2taV2FWWXphRmxXYlhSaFdWWk9WMWR1VW1wU1dGSlFWV3BHUjA1V1ZYbGtSemxXVFZkU1NWWlhOVU5XYlVWNFZsaG9WMDFHY0doWk1uaGhaRlprY2s1V1RtbFNiVGt6Vm10YVlWbFdUWGxUYTJSVVltczFWVmxYZEdGWFJteHpZVWM1V0ZKdGVGaFdNakZIVmpBeGNrNVZhRnBoTVhCeVdWWmFhMUpzVG5KaVJtUllVMFZLUkZaR1dtdFViVlpIWTBWc1ZHSlZXbFJaYkZwTFpERmFXR05GWkZSTmJGcElWakowYTFkSFNraFZia3BWVm0xU1ZGVXdXbUZqTWtaSlZHMXNVMkV6UVhkV2JHTjRVakZaZVZOc2JGWmhhelZZVkZWYWQxWXhjRmRXVkVaWFlrWktlbGRyVlRGaFJUQjNVMnhvVjJKVVFqUlVWVnBXWlVaa2MxcEdhR2hOV0VKYVYxZDBhMkl4WkVkaVNFcFlZbTFTVjFWdE5VTlNNV1J5VmxSV1ZrMUVSbGRXTWpWM1YwZEZlVlZ1V2xkU00yaFFWVzE0VDJNeVJrZGFSMmhvVFZoQ2RsWnRlRk5TTVVwMFZteGtXR0pzV2xkWmExcGhZakZTVjJGRlRsZE5WMUpaV2xWYVQxWXdNVmRYYm5CWFRXcFdURlp0TVVaa01EVlpVMnhXVjJKR2NGbFdSM2hoWVRGa1dGUnJiRlZpUm5CWVdXdGFXazFXWkhKV2JHUlBVbXhLU0ZadGVHOVZSa3BJWlVVeFYxWnRUVEJVTVZZd1ZXMUtOazFJUWtSYWVqQTVTMUZ2UFNrSykK)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in commit message

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Glad to see that test.pl has finally been fixed. I have a few nitpicks though.

@@ -0,0 +1,4 @@
#!/bin/sh
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#!/bin/bash?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surely /bin/tcsh?

Copy link
Contributor

@chrisr-diffblue chrisr-diffblue left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great! But I wonder whether this would allow us much better integration with windows if you were to reimplement as a DOS command shell script as well?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but I'm a bit concerned about the formatting.

@@ -0,0 +1,4 @@
#!/bin/sh

eval $(base64 --decode <<< ZXZhbCAkKGJhc2U2NCAtLWRlY29kZSA8PDwgWlhaaGJDQWtLR0poYzJVMk5DQXRMV1JsWTI5a1pTQThQRHdnV2xoYWFHSkRRV3RMUjBwb1l6SlZNazVEUVhSTVYxSnNXVEk1YTFwVFFUaFFSSGRuVjJ4b1lXRkhTa1JSVjNSTVVqQndiMWw2U2xaTmF6VkVVVmhTVFZZeFNuTlhWRWsxWVRGd1ZGRlVhRkZTU0dSdVZqSjRiMWxYUmtoVGExSlNWak5TVFZWcVFuZGlNV3cyVTJ4YVRtRjZWa1ZWVm1oVFZGWlplRk51VGxoV1JXc3hXVlJHZDFaR1JsVmhSa1pUVTBkU2RWWnFTalJpTVd4WVVtdG9WR0V4U2xOV2FrNVRWRlpXY1ZGdVpHbE5WM2N5VlRKNFlWUnRSalpXYTFaV1ZtMW9WRlpHV2xwbFJrNTFWR3hvVjFKWGMzaFhWbEpIWkRGYVIxSnNWbWhTYTFwVVZUQmtVMlJXV25GVGFsSnBUVmQ0V1ZWdGRHOVdSMFY0VTJ4T1YyRnJOVlJXUmxwWFkxWkdkVnBIYkU1V00yTjVWbFJLTkZsV1VuUlNhbHBYWVRGYVYxWnRNVzlXUmxwSFYyeHdiRkpyTlRGV1IzaHZWakZLV0dNemFGaFdiRXBJV2tSR1lWSXhTbk5XYldoVFlURndWVlpVUW10Vk1sSlhWMjVHVkdGc1NuQlVWbVEwVjFaV2RHUkhPVmRTTUZZMFZUSjRUMVl5Um5KT1ZsSlhVbXh3V0ZreFdrZGtWbkJJWWtVMVYwMHlUalZXYkZKTFRrWnNWMVZ1VWxOaGJIQllXVlJHWVZZeFduUk5WemxYVW14d1NGWXllSGRpUmtweVRsUkdWMUl6YUhaV2FrWkxWMGROZW1GR2FGZGlSWEJKVjJ0U1IxbFdTWGhUYms1WFlsZG9WRmxVUm5kV1ZscFZVVzEwVmsxc1NsaFdNalZIVmtkR2MxTnVRbFZXYlZFd1ZqRmFWMlJIVWtoUFZtUlRUVVpaTUZaVVNqUlVNVmw1VW01S1QxWnNTbGhWYlhoM1YwWnJlRmRyWkd0V2JrSkpXV3RWTVZZd01IbFVhbFpYWWtaS1RGUnJXbk5XTVZaMVZXeE9hR0pJUWxsWFZsSkhXVlpaZUZkdVVrNVdlbXhZVlcxNGQxTkdXWGxsU0dScFVtdHdlVlJzVWtkV01VbDZZVWhhVjJGcldreFdNR1JPWlcxR1IyRkdaR2xTV0VKS1ZqSjBVMUl4YkZkVFdHaFVZbXMxV0Zsc1pHOVdSbXhWVW01a1YxWnNjRlpWVnpFd1Ztc3hjMU5zYUZkTmFsWklWbXRrUjJNeFRuVlJiRlpYWWxaRmQxWnFSbUZXTWxKSVZXdG9VRlp0VWxSVVZWcGFUVVphVlZOcVVsVk5WbXcxVlcwMVMxUXhXbk5UYkdoV1lsaG9NMVl3V25KbFJtUnlXa2QwVjJKclNrcFhWM1JXVFZaWmQwMUliRlZoYkZwWVdXdGFTMVJHVW5KWGJrNVhUVlphTVZaWGVFOWhSMHBKVVd4c1dGWnNTa2hYVmxwYVpVWmtkVlZyTlZkbGJYaFpWbGN4TkdReFRrZFhXR3hzVTBkU2NGVnRkSGRsVmxKelZXdGtWMDFWYkRaWlZXaGhWakpHY2xkcmVGZE5SMUpQV2xjeFIxSXlSa2RhUjJ4VFYwVktTMVpxU2pCVk1VbDRZa1prVkZkSGFGVlpiWE14VjBac2MxcEhPVmRTYlhoV1ZXMDFhMVl4V25OalJscFdWbnBGZDFadGMzaGpNVTV6WVVaa1RtRnNXa2xXYlhSclVqSk5lRlJ1VmxKaVJscFlXV3hhUm1ReFduRlNiVVpYVFd4S1NWWlhkRzlWUmxwMFZXeFNWVlpXY0dGVVZWcGhWbFpPY1ZWc1ZrNVdiWGN4Vmxjd01WTXhVWGhYYms1VVlrZG9WMWxzYUc5Tk1WbDNWMjVLYkZKdFVubFhhMlF3VmpKS2NsTnJjRmhXTTFKWFZGWmFXbVF3TVVsaVJsWm9Za1p3V1ZkWGRHRlRNVkpIVlc1S1dHSnJOVmhVVmxwaFRWWmFXR1ZGT1doU01IQktWVmQ0YzFkR1duTlRhMmhZVm14d1lWcFZXbXRrVmxaeVRsWmtiR0pZYUZwV2JHTjRUa2RSZUZSclpGaFhSM2h6VlRCa1UyTkdWblJrU0dSc1ZteEtlbFpYZEd0V01ERldZa1JhV2xaWGFHaFdha3BIWTJ4a2NtVkdaRTVTTVVwUVYyeGplRkl4U1hsU2EyUmhVako0VkZZd1ZrdFRNVnB4VTJwQ1ZrMVZiRFJaYTFwclZrWmtTR0ZHVmxwaVdFMTRWakJhYzJNeGNFaFBWbVJUWWxob1YxWlhNREZoTVZsNFYyNU9hbEpzY0ZkV2JuQkdaREZhZEdNemFHcE5WVFY2V1ZWYWExUnNXWGxoUkVwWFlXdHdObHBFU2xkWFJrcHlZa1pTYVZORlNuZFdWekF4VVRGT1YxZHJhR3hTTUZwWVZGZDRTMU5XV25Sa1J6bFdUV3R3V1ZsVmFFTldiVXBJWVVWU1YwMVdjR2hXYkZwUFYxWndSazlXWkdsVFJVWXpWbXhqZDAxV1RYaFZXR2hZWW1zMVZWbHNWbUZYUm14eVYyNWtUazFXYkROV01qRkhZV3N4V0ZWdWJGaGhNbEl6V1ZaYVlXTnRUa1pqUm1ob1RWWndXRlpHV21GWGJWRjNUVlprV0dKWGVGUlZiRkpYVjFaYVIxZHRkRlpOUkVJMFZqSjBWMVpIUlhoalNFNVhZbGhTTTFZeWVITmpiR1J6Vkcxb1UxWkZXWGhYVmxaaFZURmtSMWR1VGxSaE0yaFdXVlJHZDJOc1ZuRlRhM1JVVm14S01GbFZXazlXTVZwSFYyeG9WMkpIVGpSVWEyUlNaVVpTY2xwR2FHbGhlbFoyVmxkd1QxVXlUa2RXYmxKclUwZFNUMVZ0ZUhkWFZsSnpXWHBXVjAxRVJubFpNRnAzVjJ4YVdHRkhhRmRoYTNCSVdUSXhUMUp0VmtkYVIyeFlVbFJSZDFadE1UUlpWbGw1VkZoc1UyRXlVbWhWYWtvMFZrWlpkMVpyZEZWTlZuQXdXbFZhVDFaSFNsZFhhMmhYVFZkb2RsWXdaRXRqYlU1R1QxWmthVmRIWjNwWFYzQkhWakpPVjFKdVVsTmlSMUpVV1d4b2JtUXhaSEpXYkdST1VteHdlbFV5TlZOV2JVcElZVVpzVjJFeFZYaGFSM2hoVTBkV1JtUkdaRmRpU0VJMVYxWldZV0l5UmtaTlZteFNZV3R3V0ZsVVNsSk5SbFkyVW10MGFrMVlRa3BXUnpGSFZUSktjbE5zY0ZkV1JVcFlWWHBCTVdNeFpIVlZiWEJUVmpGS1dGWkdXbUZqTURWSFdraEthRkpVYkZoV2FrSjNVMFpyZDJGRlRsZE5hM0JKV1ZWV1UxWXdNWFZoU0VwYVpXdGFhRnBGVlRWV01WSnlUbFprVGsxdGFHRldiVEYzVWpKSmVWVllhRmRpYkVwVVZqQmtiMVpXYkhKWGJtUmFWbTE0VmxWdE5XdFVhekZYWTBaa1YwMXFSa2haVkVaS1pVWmtjbUZHYUdoTmJFbDZWMVphWVZsV1dsZFhia3BvVW0xb2NGVnRlSGRYUmxwSFYyMUdXbFpyYkRSV1IzaHpZVVpLY2s1V2JGWmhhM0IyVmpGYWExZEhWa2hQVjJ4T1lYcFdXVmRVUW1GWlZsbDRWMnRhV0dKR1dsZFpiR2hUVFRGWmVXVklUbXBpUjFKNVZERmtiMVl5UlhwUmFscFlWa1ZLZGxsVVJscGxSbVJaWTBaYWFWSXlhRnBXYlRCNFZURk9SMVp1UmxOaVZWcHlWbTE0WVdWV1VuTlhiWFJvVWxSQ00xVXllRWRXTWtwSVZHcE9ZVlpXVmpOYVJFRjRWMVpTYzFwSGJGTk5iV2hTVm0weE5GVXlUWGhhUldSWFlteEtjMVV3VlRGVlJsWjBaVWRHVGxKdGRETldNakV3VjBaS2NtSkVUbGRpV0VKVVZqSnplRkl4VG5OUmJHUm9ZVEZ3VFZaSE1UUlRNazUwVm10a2FsSXphRzlVVm1oRFZXeGFkRTFVVWxwV2JFWTFWa1pvYzFVeVJYbGhSemxXWWtaS1dGWXhXbGRqTVZwMVYyczFVMkpJUWpSV1ZFcDNVVEZhY2sxV1dtbFNSbHBZVm01d1YxWkdXbkZUYTNSVVVteGFNRmxWV21GVWJFcHpZak53VjJKWVFraFpla3BQWXpGa2RWWnRSbE5OTUVwVlYxZDBhMDB5Vm5OWGJsSk9Wa1ZLVDFWcVFuZFRSbGw1VGxVNWFHSkZOVWxaVlZwclZqSktkVkZyYUZaTlJuQm9WbXhhUjFkWFJraGpSMnhYVmtaYVRGWXhVa05aVjBWNFYxaGtUbE5IYUZWWmJURTBWMFpTVjFkdVpHaFNiRmt5VlRKNFQxWXdNVlpqUkVaWFlsaG9XRmxXV2t0a1ZrWjFXa1prVjAwd1NrbFdWekI0VlcxV1IxcElUbWhTTTJoVVZGVmFkMWRHV2tkWGJVWnFUVVJXU0ZsVVRtdFdNa3BJVld4a1dtSkdXak5WTUZwV1pWVTFWbFJzWkdsV1dFSkpWMVJDYTFJeFdsZFhiazVxVWpKb1lWUlhOVzlsVm5CWVpVaGtVMkY2VmxoWGEyUnpWa1pLVm1ORmVGZGlXR2hVVlRKemVGWXhXbGxpUmxKb1RXeEtWMWRXVWt0aU1rMTRWbTVHVW1KVldsbFZiVEUwWld4c1ZsbDZWbGROUkVaWVZUSjRiMVl3TVhWaFJrSlhZV3RhYUZreWN6RlhWMHBIWTBVMVUwMVZXWHBXYlhScVpVWk5lRk51VWxWaE1YQnhWVzB4YjFkR2JISlhibVJwVFZkU1dGWlhkR3RXYXpGeVRWUlNXR0V4Y0hwWlYzaEtaVmRHUjFWc1dtbFNia0Y2Vm1wR1lXRXhXWGhqUlZaU1lsaFNiMXBYZEdGVFZtUllaRWM1VTAxV2NFbFZiR2gzVlcxS2NrNVdhRnBpUjJoMldWVmFXbVZYVmtsVWJYQnBVakZLTmxZeWRHdGlNVmwzVFZWa1dGZElRbGxXYTFaTFlVWmFWVkpzY0d4V2F6VjZXV3RhUzJGRk1IbGhSbVJZVm14S1NGcEVSbUZTTVZwMVVteE9hVlpXY0hsV2JURTBaREF4UjJFelpGaGhlbXh2VldwR1lXVnNXWGxqUms1WFRXdHdTVlpIY0ZOWlZsbDZWR3BTVjJGclduSldNV1JIVWpKR1NHRkZOV2xXTW1jeVZtMTRhMlF4UlhoaVJtUnBVbTFTV1ZsdGN6RldNV3hWVTJ4T1YxSnRlSGxXTWpGSFZHeEtjMU51Y0ZoaE1VcEVWbXBCZUdOdFRrWmhSbkJPVWpKb05sWnRlR3RTYlZaWVVtdHNWR0pIVW05WlZFWjNWRlprV1dORlpGcFdNRFZZVm0wMVQyRnNTWHBoUnpsVlZtMW9SRlpYZUZwbFYxSklVbXh3VjJKR1dURldiR1F3WVRGYVNGTnVTazlXYkhCaFZqQm9RMWRHYTNkWGJrNVlWakExUjFZeWN6RlZNa3BKVVdwU1YxWkZjRE5WVkVacll6RmtXVnBHWkdoaVJYQlpWMWQwYTJJeVVuTmFSbVJZWVROU1dWVnFRbUZUUm14V1YyNWtWMDFWY0ZsVU1HaHJWakpLVlZKVVFscGxhM0JRV1hwR2EyUldUblJrUms1T1RVVndVVlp0TUhkTlZrVjNUbGhPV0dKc1NrOVZhMVpoVm14U1YxZHJkR3hXYkVwWVZqSXdOVll5U2xaalJXeGFWbFp3ZGxZeU1VdFNNVTV5V2tkR1UxSldjRzlYVkVaaFVqRmtXRkpyYUdwU1ZGWllWbXRhV2sxc1duRlRha0phVmpCV05GWnNhSE5XTWtweVRsWnNXbFpGV21oV01GcHpZMnh3UjFOck5WTmlSM2N4VmtaYVlXRXhXWGROVm1ScVVrVmFXRlp1Y0Vka2JGcFZVMnQwVjAxVk5URldNbmh2VmpKS1JtTkZWbGRpV0VKRFZGWmFTbVZIVGtaaVJsSnBWbFp3VlZaWE1UQmtNbFpIVjJ0a1lWSkdTbFZVVm1SVFYwWmFjMkZJVG1oTlZXd3pWako0YjFZeVJuSlRhazVXVFZad2FGWXdaRTlPYkZweldrVTFhRTB3U2t0V01WcFhWakZWZUZkWVpFNVdiVkp4VldwS2IxZEdiSEpYYm1SV1VtMTBORll5ZEd0aE1VbDRVMnRrVldKR2NISlpWbHBMWkVkU1JWVnNaR2xYUjJoNVZrZDBhMU50VmxkVmJHeHBVbXhLYjFSWGVFdFdiR1JZWkVkMFZrMVhVbGhaYTJoTFdWWktjazVXYkZaaVZFVXdXbGQ0YzFac2JEWldiRlpvWld0YVdWZFVRbTlqTVZsM1RWaFdhRkl5YUdGWlZFWjNXVlp3VmxkdGRHcGlWVnBJVmpKek1XRkhSWGhYV0hCWFlsaFNjbFJyV2s1bFJrNVpZVWRHVkZKWVFuaFdWekI0VlRGUmVHSklVbXhTV0ZKd1ZGWmFjMDVHV1hsTlZXUlhZWHBHZVZSV1VsTlhSMFY1WVVab1YySkhVa3hXTVZwSFl6RldjMXBIYkZkU2JIQkdWbTF3UjFsV2JGaFZhMXBPVm14YVYxbHJXa3RVTVZwellVVk9WRlpzY0hoVk1WSkhWVEF4VjFacVZsWk5ibWhvVmpCa1MxSXhUbk5YYkdScFYwZG5lbFpHVWtkWGJWWllWbXRvYTFJelFuQlZha1pLWkRGYVJWSnRkR2xOVm13MVZXeG9kMVZzWkVoaFJtaFhZbFJHVTFSVlduTldWa3B6WTBkNFUySldTbUZYVkVKaFdWZEdXRk5yYkZKaVIzaFlWbXBPVTFkR1pGZFhiVVpUVFZad01WVnRlRTloVjBwWFUyeGFWMkpVUlRCVmVrRjRVakZhZFZWdGVGTldSM2hZVmtaa01GWXdOWE5XYkdocVVqQmFXRlJWVWtkWFZscFhZVWQwV0dKVldubFdNblJyV1ZaYVYyTkhhRmROVjFKSVZUQmtTMUl4Vm5OVWJHUnBZVEJ3V1ZadGNFZGhNRFZJVTFob1YxZEhhRmxaYTJSVFkwWlZkMVp1WkZoU2JYZ3dXVE53UjFac1NuTlhha0poVmxkb1VGWkVSbUZqTVU1MVkwWmthVlpGVmpOV2FrSmhVMjFSZVZScldtaFNia0pQVlcwMVEwNXNXblJqUldSVVRXc3hORlpITlV0V2JVcElWV3M1Vm1GcldreFZNVnByVmxaT2NWVnRhRTVpUlhCS1ZsY3hNR0V5Um5OVGJGWlhZbXRLWVZsclpGTmtiSEJJWlVad2JGSXdXa3BYYTFwUFZHeGFjMWRVUmxkaE1YQjJXV3BHV21WV1RuVlRhemxYVFcxb1dGZFhlRk5TTVZwSFlUTmtXR0pyTlZoV2JYUmhUVlprY2xkc1pHaFdhM0F4VlZab2ExZEhTa2RYYmtwV1lXdGFhRmt5YzNoV01XUnpXa2RvYVZKWVFsbFdhMXBoWVRKSmVWVnVUbGhYUjFKb1ZXeG9VMVpXVm5SbFIwWnNZa1pzTlZwVmFHdGhSa3BWVW14d1ZsWnRhRE5XYWtwTFVqSk9TR0ZHYUZkaVZrcFFWMnhXWVZsWFVsZFhiazVYWWxkNFZGbFVUa05WVmxwMFRVaG9UMUl4UmpOVWJHaFBWMGRLY2xkc1ZsZGhNVnBvV1dwR1UxWXhaSFJTYlhoWFlrVndXVlpxU1hoTlJsbDNUVmhLV0dKdVFsZFVWelZ2Wkd4WmVVMVZkRlJTTUZwSFZsZDRhMkZGTVZsUmJUbFhZbGhvYUZaRVNrOWtSbFp5V2taV2FWWXphRmxXYlhSaFdWWk9WMWR1VW1wU1dGSlFWV3BHUjA1V1ZYbGtSemxXVFZkU1NWWlhOVU5XYlVWNFZsaG9WMDFHY0doWk1uaGhaRlprY2s1V1RtbFNiVGt6Vm10YVlWbFdUWGxUYTJSVVltczFWVmxYZEdGWFJteHpZVWM1V0ZKdGVGaFdNakZIVmpBeGNrNVZhRnBoTVhCeVdWWmFhMUpzVG5KaVJtUllVMFZLUkZaR1dtdFViVlpIWTBWc1ZHSlZXbFJaYkZwTFpERmFXR05GWkZSTmJGcElWakowYTFkSFNraFZia3BWVm0xU1ZGVXdXbUZqTWtaSlZHMXNVMkV6UVhkV2JHTjRVakZaZVZOc2JGWmhhelZZVkZWYWQxWXhjRmRXVkVaWFlrWktlbGRyVlRGaFJUQjNVMnhvVjJKVVFqUlVWVnBXWlVaa2MxcEdhR2hOV0VKYVYxZDBhMkl4WkVkaVNFcFlZbTFTVjFWdE5VTlNNV1J5VmxSV1ZrMUVSbGRXTWpWM1YwZEZlVlZ1V2xkU00yaFFWVzE0VDJNeVJrZGFSMmhvVFZoQ2RsWnRlRk5TTVVwMFZteGtXR0pzV2xkWmExcGhZakZTVjJGRlRsZE5WMUpaV2xWYVQxWXdNVmRYYm5CWFRXcFdURlp0TVVaa01EVlpVMnhXVjJKR2NGbFdSM2hoWVRGa1dGUnJiRlZpUm5CWVdXdGFXazFXWkhKV2JHUlBVbXhLU0ZadGVHOVZSa3BJWlVVeFYxWnRUVEJVTVZZd1ZXMUtOazFJUWtSYWVqQTVTMUZ2UFNrSykK)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could use some line breaks for increased readability.

@karkhaz
Copy link
Collaborator Author

karkhaz commented Apr 1, 2019

Thank you all for the thoughtful reviews. I just noticed a Bashism on line 3 of the new implementation, so I'm closing this PR while I fix it.

@karkhaz karkhaz closed this Apr 1, 2019
@karkhaz karkhaz deleted the kk-cbmcsh branch April 1, 2019 16:13
@NathanJPhillips
Copy link
Contributor

/dev/urandom is based on secure hashes rather than using ciphers under Linux (to avoid cryptography export restrictions that were in place when the generator was originally designed). This may cause it not to accurately represent the run-time behaviour of the input program. Consider using ciphers in your fixed version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Replace test.pl by Python-based implementation, possibly within pytest
8 participants