<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://vegard.wiki/mediawiki/index.php?action=history&amp;feed=atom&amp;title=User%3AVegard%2FProjects</id>
	<title>User:Vegard/Projects - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://vegard.wiki/mediawiki/index.php?action=history&amp;feed=atom&amp;title=User%3AVegard%2FProjects"/>
	<link rel="alternate" type="text/html" href="http://vegard.wiki/mediawiki/index.php?title=User:Vegard/Projects&amp;action=history"/>
	<updated>2026-07-04T15:50:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://vegard.wiki/mediawiki/index.php?title=User:Vegard/Projects&amp;diff=140&amp;oldid=prev</id>
		<title>Vegard: new page</title>
		<link rel="alternate" type="text/html" href="http://vegard.wiki/mediawiki/index.php?title=User:Vegard/Projects&amp;diff=140&amp;oldid=prev"/>
		<updated>2020-02-06T21:15:10Z</updated>

		<summary type="html">&lt;p&gt;new page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Here&amp;#039;s a (rather incomplete) list of some of the stuff I&amp;#039;ve worked on over the years.&lt;br /&gt;
&lt;br /&gt;
== 2004-2006 ==&lt;br /&gt;
&lt;br /&gt;
=== Project Legilimensia ===&lt;br /&gt;
&lt;br /&gt;
Project Legilimensia was a Harry Potter-themed MUD run by a group of people loosely affiliated with MuggleNet. The MUD was based on the Dawn of Time codebase, a MERC/CircleMUD/DIKU derivative (and therefore also written in C). My main contribution was adding support for Wizarding money (Galleons, Sickles, Knuts). This also included a couple of attempts to write my own codebase from scratch and my first foray into network programming in C.&lt;br /&gt;
&lt;br /&gt;
* Project Legilimensia website (archived): https://web.archive.org/web/20050720003715/http://lumos.mugglenet.com/forums/&lt;br /&gt;
* Dawn of Time codebase (archived): https://web.archive.org/web/20190801222036/http://www.dawnoftime.org/&lt;br /&gt;
&lt;br /&gt;
== 2007-2012 ==&lt;br /&gt;
&lt;br /&gt;
=== kmemcheck ===&lt;br /&gt;
&lt;br /&gt;
kmemcheck was a patch I wrote for the Linux kernel that attempted to mimick what Valgrind and memcheck do for userspace programs: find uses of uninitialized memory, but for the kernel itself. It was pretty slow and had some severe limitations because of the way memory accesses were trapped; basically it was taking a page fault and a single-stepping debug exception for every heap access. Eventually the whole feature was obsoleted by proper instrumentation added by the compiler itself (in particular ASAN and MSAN).&lt;br /&gt;
&lt;br /&gt;
* https://lwn.net/Articles/260068/&lt;br /&gt;
&lt;br /&gt;
=== RGBDS (GameBoy) ===&lt;br /&gt;
&lt;br /&gt;
During one particularly slow day in June 2009, I decided to see if I could do some programming for my GameBoy. I had looked into this years before and not really gotten very far, mostly because I was using DOS and did not have an Internet connection at home. Anyway, I looked up the old tools and one of the most popular assemblers for the GameBoy was the RGBDS -- the &amp;quot;Rednex GameBoy Development System&amp;quot;. I think the code had worked on Linux already at that point, but the age of the code showed a bit, so I spent the day trying to make it build on Linux and cleaning it up a little.&lt;br /&gt;
&lt;br /&gt;
I got a few drive-by contributions to my repository over the years, but several years later I became aware that somebody had forked my GitHub repo and picked up the slack (and development continues to this day):&lt;br /&gt;
&lt;br /&gt;
* The official RGBDS repo: https://github.com/rednex/rgbds/commits?author=vegard&lt;br /&gt;
&lt;br /&gt;
=== 2D stylophone ===&lt;br /&gt;
&lt;br /&gt;
I adapted a Wacom tablet with a custom layout and used a custom program to convert tablet input into a MIDI source which was also hooked up to a software synth. Here&amp;#039;s a very bad demo recorded on a 2010-quality webcam:&lt;br /&gt;
&lt;br /&gt;
* https://www.youtube.com/watch?v=tfJ5ePmA-iA&lt;br /&gt;
&lt;br /&gt;
=== Bitcoin ===&lt;br /&gt;
&lt;br /&gt;
I made a few tangential contributions to the Bitcoin code back in 2011 when GPU mining was all the rage:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/bitcoin/bitcoin/commits?author=vegard&lt;br /&gt;
&lt;br /&gt;
=== Password manager ===&lt;br /&gt;
&lt;br /&gt;
I made a password manager in JavaScript that would generate unique, per-website passwords without storing anything either locally or on a server:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/vegard/pwman&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m not sure I can really recommend the use of this, since it has some potentially-questionable cryptographic code, in particular the use of base64 to convert a random binary string into something that is useable as a password. It also doesn&amp;#039;t really have enough hashing rounds to prevent cracking, but you can&amp;#039;t really go very high (in terms of number of rounds) in JavaScript before it starts to get noticeable.&lt;br /&gt;
&lt;br /&gt;
=== Master thesis ===&lt;br /&gt;
&lt;br /&gt;
Despite the overly optimistic/pretentious title (&amp;quot;SAT-based preimage attacks on SHA-1&amp;quot;), I did not find any actual (real-world) attacks. My thesis was more about investigating the possibilities and limitations of using SAT as a method for approaching SHA-1 preimage attacks. Oh, well, I can&amp;#039;t change the title now. In any case, I did manage to improve on the (at the time) current literature by finding a new way to encode full-adder circuits.&lt;br /&gt;
&lt;br /&gt;
* Thesis:&lt;br /&gt;
** https://www.duo.uio.no/handle/10852/34912&lt;br /&gt;
** http://urn.nb.no/URN:NBN:no-33622 (permalink)&lt;br /&gt;
* Instance generator: https://github.com/vegard/sha1-sat&lt;br /&gt;
&lt;br /&gt;
Here is a very concise (but detailed) description of my improvements to the CNF encoding of full adder circuits:&lt;br /&gt;
&lt;br /&gt;
* https://helda.helsinki.fi//bitstream/handle/10138/40026/sc2013_proceedings.pdf?sequence=2&lt;br /&gt;
&lt;br /&gt;
The really nice thing is that the SHA-1 SAT instance generator I wrote for my thesis actually ended up being used by the people who put the final nail in the coffin for SHA-1 by finding an actual collision:&lt;br /&gt;
&lt;br /&gt;
* https://shattered.io/&lt;br /&gt;
* https://shattered.io/static/shattered.pdf&lt;br /&gt;
&lt;br /&gt;
I also wrote a SAT solver for my thesis, but it ended up not being part of the thesis itself. I now use it mainly as an example of really bad C++ code.&lt;br /&gt;
&lt;br /&gt;
== 2012-2018 ==&lt;br /&gt;
&lt;br /&gt;
=== Fuzzing ===&lt;br /&gt;
&lt;br /&gt;
Around 2016 I got really interested in fuzzing stuff using AFL and tried applying it to a bunch of software. I wrote a few blog posts about it:&lt;br /&gt;
&lt;br /&gt;
* OpenSSH: http://www.vegardno.net/2017/03/fuzzing-openssh-daemon-using-afl.html&lt;br /&gt;
* GCC/clang/rustc: http://www.vegardno.net/2018/06/compiler-fuzzing.html&lt;br /&gt;
&lt;br /&gt;
Together with Quentin Casasnovas I also adapted AFL for the Linux kernel and we gave a talk about Linux kernel filesystem fuzzing at Vault (Linux Filesystem and Storage) 2016:&lt;br /&gt;
&lt;br /&gt;
* LWN article: https://lwn.net/Articles/685182/&lt;br /&gt;
* Slides:&lt;br /&gt;
** (Archived:) https://web.archive.org/web/20190224231153/https://events.static.linuxfound.org/sites/events/files/slides/AFL%20filesystem%20fuzzing%2C%20Vault%202016_0.pdf&lt;br /&gt;
&lt;br /&gt;
=== Known Exploit Detection ===&lt;br /&gt;
&lt;br /&gt;
* https://lwn.net/Articles/577432/&lt;br /&gt;
* https://blogs.oracle.com/linux/using-ksplice-to-detect-exploit-attempts&lt;br /&gt;
&lt;br /&gt;
=== Compiler ===&lt;br /&gt;
&lt;br /&gt;
In 2017, taking inspiration from Jonathan Blow (and his programming language, Jai), I decided to set out in earnest to create my own programming language and compiler as well. I&amp;#039;ve always been fascinated by programming languages and this was something I had wanted to do for a long time, but somehow I always got stuck on stupid problems right in the beginning (such as e.g. solving shift/reduce conflicts in a grammar file).&lt;br /&gt;
&lt;br /&gt;
* https://github.com/vegard/v/&lt;br /&gt;
&lt;br /&gt;
== 2018 onwards ==&lt;br /&gt;
&lt;br /&gt;
In July 2018 I became a father and subsequently had a lot less time to work on my programming projects.&lt;/div&gt;</summary>
		<author><name>Vegard</name></author>
	</entry>
</feed>