<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tuttle</id>
	<title>VideoLAN Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tuttle"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Tuttle/"/>
	<updated>2026-11-04T14:36:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19620</id>
		<title>SoC 2011/OMA/Atrac Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19620"/>
		<updated>2011-09-14T19:17:52Z</updated>

		<summary type="html">&lt;p&gt;Tuttle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoCProject|year=2011|student=[[User:tuttle|David Goldwich]]|mentor=Benjamin Larsson}}&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
I&#039;m working on the OMA demuxer in libavformat to implement a decryptor for OpenMG protected audio files. If I can complete this task in time, I will work on finishing an ATRAC3plus decoder for libavcodec.&lt;br /&gt;
&lt;br /&gt;
==OMA Decryptor==&lt;br /&gt;
===Overview===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;The idea of the Sony DRM is that there are up to 232 different &amp;quot;root keys&amp;quot; used for different purposes. Each of these root keys is distributed in the form of EKBs (enabling key blocks) which contain the root key in encrypted form. The EKBs are considered to be public. All devices and software products taking part in the Sony rights-management system are identified by their 64-bit product ID (called leaf ID in Sony speak). Each n-bit-prefix of the product ID is associated with a specific key (called node key in Sony speak) that all devices having a device ID in that specific range share. In the easiest case, the EKB contains the root key encrypted with some of these node keys, in more convoluted cases, the EKB contains key chains.&#039;&#039;&amp;lt;sup&amp;gt;[[#ref_anon|note]]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Header Format===&lt;br /&gt;
Standard ID3 headers are used in .oma files (usually v2.3) with the magic &amp;quot;ea3&amp;quot; instead of &amp;quot;ID3&amp;quot; [http://wiki.multimedia.cx/index.php?title=Oma]. Encryption headers are stored as binary data within a GEOB frame [http://www.id3.org/d3v2.3.0#line-1400] with content description &amp;quot;OMG_LSI&amp;quot; or &amp;quot;OMG_BKLSI&amp;quot;. The ID3 header is followed by an &amp;quot;EA3&amp;quot; header of size 0x60 bytes.&lt;br /&gt;
&lt;br /&gt;
===GEOB Binary Data Format===&lt;br /&gt;
All values big-endian, i.e. network byte order.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Header:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[2 bytes] version (must be 1)&lt;br /&gt;
[2 bytes] n1: size of the keyring subobject (should be 0x40)&lt;br /&gt;
[2 bytes] n2: size of the EKB subobject&lt;br /&gt;
[2 bytes] n3: size of the ID subobject&lt;br /&gt;
[2 bytes] n4: size of the signature subobject (must be 8)&lt;br /&gt;
[6 bytes] padding to get the main object header to 16 bytes&lt;br /&gt;
[n1 bytes] keyring subobject&lt;br /&gt;
[n2 bytes] EKB subobject&lt;br /&gt;
[n3 bytes] ID subobject&lt;br /&gt;
[n4 bytes] signature subobject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keyring subobject:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
subobject header:&lt;br /&gt;
  [12 bytes] subobject ID, must be &amp;quot;KEYRING     &amp;quot; (5 spaces at the end)&lt;br /&gt;
  [2 bytes] subobject slice size (should be 16)&lt;br /&gt;
  [2 bytes] subobject slice count (should be 3, does not include the header which always occupies one slice,&lt;br /&gt;
            so slice size can not be lower than 16 bytes)&lt;br /&gt;
&lt;br /&gt;
subobject body:&lt;br /&gt;
  [2 bytes] amount of used data bytes in the body (this field included, should be 0x28)&lt;br /&gt;
  [10 bytes] unknown&lt;br /&gt;
  [4 bytes] ID of the root key used to encrypt the keys in the keyring&lt;br /&gt;
  [8 bytes] file master key 3-DES encrypted by the root key.&lt;br /&gt;
  [8 bytes] content encryption key DES &amp;quot;decrypted&amp;quot; by the file master key&lt;br /&gt;
  [8 bytes] unknown&lt;br /&gt;
&lt;br /&gt;
subobject padding:&lt;br /&gt;
  [8 bytes] padding to fill the last slice&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EKB subobject:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(optional) header: &amp;quot;EKB &amp;quot; followed by 28 bytes of zero.&lt;br /&gt;
&lt;br /&gt;
(mandatory) The EKB:&lt;br /&gt;
  [4 bytes] EKB ID (should always match the required root key ID from the keyring)&lt;br /&gt;
  [4 bytes] reserved (usually 0x0)&lt;br /&gt;
  [24 bytes] key check value, this value 3-DES decrypted with the EKB root key should yield to:&lt;br /&gt;
            EKB root key + EKB ID + 4 bytes random padding (the value can be used to test&lt;br /&gt;
            if a root key is valid for an EKB if the ID is unknown)&lt;br /&gt;
  [4 bytes] tlen: tag length&lt;br /&gt;
  [4 bytes] dlen: data length&lt;br /&gt;
  [4 bytes] sig length&lt;br /&gt;
  [tlen bytes] tags (this can be used to see if a node key has an entry point in the EKB)&lt;br /&gt;
  [dlen bytes] blocks of 24 bytes, each being the root key for this EKB 3-DES encrypted with a node key&lt;br /&gt;
  [4 bytes] significant tag length&lt;br /&gt;
  [rest of the subobject] some ECDSA sigs, irrelevant for key recovery&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output of an EKB (from [http://samples.mplayerhq.hu/oma/03-Exodus.oma]):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EKB ID:       0x1001d&lt;br /&gt;
Reserved:     0x0&lt;br /&gt;
Unknown 3:    3947f40a33652f987173c39868c5235b8420c8cffb0e7f4e&lt;br /&gt;
Tag Length:   0xc&lt;br /&gt;
Data Length:  0x50&lt;br /&gt;
Sig Length:   0x34&lt;br /&gt;
Tags:         851451450402fffe00000000&lt;br /&gt;
Data:         36d200387491519da7759470a01769da Enc(K00000000,KR)&lt;br /&gt;
              6955aea69f6a3e6918c7c6bbd7ccfb1b Enc(K00000001,KR)&lt;br /&gt;
              818da9979067295cb7555aec211b9ebd Enc(K00000010,KR)&lt;br /&gt;
              d47ed90979e039a1e076680db8bfedb0 Enc(K00000011,KR)&lt;br /&gt;
              d32426b8f77922bd46c9449fdf0174c0 Enc(K11111111,KR)&lt;br /&gt;
Significant Tag Length:  0x8&lt;br /&gt;
Sig ID:       0x1&lt;br /&gt;
Sig Len:      0x28&lt;br /&gt;
 ECDSA r:     db546ac5e04d4fcbf2463b01de2cd0fbaf7aa71e&lt;br /&gt;
 ECDSA s:     ef442905979dbee7284ea4533a2f71c7cb865839&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
K00000000 is Sony&#039;s nomenclature meaning the key for the device group whose device ID starts with 0 bits of zero. See the EKB dumping script [https://wiki.physik.fu-berlin.de/linux-minidisc/doku.php?id=dump_ekb] for details on the EKB format and how to identify keys in the tag/data section. The ID of the key used by Sonic Stage in their .oma files is 0x0001001d, and this also seems to used in almost any .oma file out there.&lt;br /&gt;
&lt;br /&gt;
A more complex example of an EKB with key chains:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EKB ID:       0x1000a&lt;br /&gt;
Reserved:     0x0&lt;br /&gt;
Key chec val: 68869089b724181ee860041d2eb3fddbe74c7ccdb1e306c0&lt;br /&gt;
Tag Length:   0x1c&lt;br /&gt;
Data Length:  0x130&lt;br /&gt;
Sig Length:   0x34&lt;br /&gt;
Tags:         a49248039e4d208040007fffff8240e002492493fffff00000000000&lt;br /&gt;
Data:         2798095a2e864002d58f1f68fa25fb91 Enc(K000000000,KR)&lt;br /&gt;
              2545064deaca14f996bdc8a406c22b81 Enc(K000000010,KR)&lt;br /&gt;
              66eb2dff4e3752253f5915e451d94aad Enc(K0000000110,KR)&lt;br /&gt;
              a8ecfb6c65c949f7c47de8f96df6bd2b Enc(K00000001100000,K0000000110)&lt;br /&gt;
              7d5b1a6ef42253538b6b1dfb81380d4a Enc(K00000001100001,K0000000110)&lt;br /&gt;
              e7215b57914edff8a3d9930b5a4faa55 Enc(K00000001100010,K0000000110)&lt;br /&gt;
              24aa87026900960ab3df6a20a9f1ead4 Enc(K00000001100011,K0000000110)&lt;br /&gt;
              e66453a64523f244e2378b87d3518dc1 Enc(K00000001100100,K0000000110)&lt;br /&gt;
              be2d2af50cf2a2d9be91769e835e6300 Enc(K00000001100101,K0000000110)&lt;br /&gt;
              846a3f493e6dd0fddaf83beb59f7c1cf Enc(K00000001100110,K0000000110)&lt;br /&gt;
              569501035dbdc3e6a579482d76489800 Enc(K00000001100111,K0000000110)&lt;br /&gt;
              bd7983a89133d9e679210b241f4580e3 Enc(K00000000100000000,KR)&lt;br /&gt;
              62511ba02562e3166401caa2f4f2eb01 Enc(K0000000010000001010,KR)&lt;br /&gt;
              67ccc10fef049f9479c7eab249cc0560 Enc(K0000000010000001100,KR)&lt;br /&gt;
              a1955eeb7bd2fe5d2bb9cef90195c10a Enc(K0000000010000001110,KR)&lt;br /&gt;
              65d4735bac760a45788f669b26d4c0e0 Enc(K0000000010000010000,KR)&lt;br /&gt;
              80b14ed5872e3c6b0c987ae5961a9567 Enc(K0000000010000010010,KR)&lt;br /&gt;
              8a3bff4f583e6a8288cddcb6f5e05228 Enc(K0000000010000010100,KR)&lt;br /&gt;
              fe2357f456e78ba190db9bf231026a1f Enc(K00000000100000010000,KR)&lt;br /&gt;
Significant Tag Length:  0x17&lt;br /&gt;
Sig ID:       0x1&lt;br /&gt;
Sig Len:      0x28&lt;br /&gt;
 ECDSA r:     74a60db08631afd1374201938e3425adab577d30&lt;br /&gt;
 ECDSA s:     deb9c346ac19e889af451905fefd0024e3772cfe&lt;br /&gt;
  verify OK:  True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ID subobject:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The ID subobject consists of different sub-subobjects formatted like the keyring object, details unnecessary for key recovery.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Signature subobject:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The signature subobject is the single-DES CBC-MAC of the ID subobject, using a key derived from the file master key. You obtain the signature key by encrypting 8 bytes of 0 with the file master key. You can use this signature to verify that the key recovery worked.&lt;br /&gt;
&lt;br /&gt;
===EA3 Header===&lt;br /&gt;
In encrypted .oma files, the encryption field at offset 6/7 is set to 1 and the last 8 bytes of the header, i.e. offset 0x58 in that header, are the IV for the data starting at offset 0x60.&lt;br /&gt;
&lt;br /&gt;
==PCM support==&lt;br /&gt;
Oma files can carry linear PCM data, in this case the byte at offset 32 in the EA3 header has the value 4. PCM support is easily integrated with the decryptor and FFmpeg&#039;s existing PCM codec. The only format parameters observed so far are: 44.1 kHz sample rate, 16 bit sample size, stereo mode, big-endian. Other parameters might be used, but that needs to be tested with a device (the files cannot be generated with Sonic Stage).&lt;br /&gt;
&lt;br /&gt;
==ATRAC3plus Decoder==&lt;br /&gt;
The current state of the ATRAC3plus decoder is unknown. Development has not been started during GSoC, but will afterwards.&lt;br /&gt;
&lt;br /&gt;
==Repository==&lt;br /&gt;
[https://github.com/plumbojumbo/FFmpeg https://github.com/plumbojumbo/FFmpeg]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
&lt;br /&gt;
You can reach me at firstname.lastname@gmail.com or as atuttle on Freenode. Feel free to get in touch with me if you have any questions.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
#&amp;lt;span id=&amp;quot;ref_anon&amp;quot;&amp;gt;The system has been extensively reverse engineered by an anonymous source on whose results this information and the implementation is gratefully based on.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*http://wiki.multimedia.cx/index.php?title=Oma&lt;br /&gt;
*http://www.waider.ie/hacks/workshop/c/mple/FILE_FORMAT_v2.txt&lt;br /&gt;
*https://wiki.physik.fu-berlin.de/linux-minidisc/doku.php?id=dump_ekb&lt;/div&gt;</summary>
		<author><name>Tuttle</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19607</id>
		<title>SoC 2011/OMA/Atrac Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19607"/>
		<updated>2011-09-07T12:11:59Z</updated>

		<summary type="html">&lt;p&gt;Tuttle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoCProject|year=2011|student=[[User:tuttle|David Goldwich]]|mentor=Benjamin Larsson}}&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
I&#039;m working on the OMA demuxer in libavformat to implement a decryptor for OpenMG protected audio files. If I can complete this task in time, I will work on finishing an ATRAC3plus decoder for libavcodec.&lt;br /&gt;
&lt;br /&gt;
==OMA Decryptor==&lt;br /&gt;
===Overview===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;The idea of the Sony DRM is that there are up to 232 different &amp;quot;root keys&amp;quot; used for different purposes. Each of these root keys is distributed in the form of EKBs (enabling key blocks) which contain the root key in encrypted form. The EKBs are considered to be public. All devices and software products taking part in the Sony rights-management system are identified by their 64-bit product ID (called leaf ID in Sony speak). Each n-bit-prefix of the product ID is associated with a specific key (called node key in Sony speak) that all devices having a device ID in that specific range share. In the easiest case, the EKB contains the root key encrypted with some of these node keys, in more convoluted cases, the EKB contains key chains.&#039;&#039;&amp;lt;sup&amp;gt;[[#ref_anon|note]]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Header Format===&lt;br /&gt;
Standard ID3 headers are used in .oma files (usually v2.3) with the magic &amp;quot;ea3&amp;quot; instead of &amp;quot;ID3&amp;quot; [http://wiki.multimedia.cx/index.php?title=Oma]. Encryption headers are stored as binary data within a GEOB frame [http://www.id3.org/d3v2.3.0#line-1400] with content description &amp;quot;OMG_LSI&amp;quot; or &amp;quot;OMG_BKLSI&amp;quot;. The ID3 header is followed by an &amp;quot;EA3&amp;quot; header of size 0x60 bytes.&lt;br /&gt;
&lt;br /&gt;
===GEOB Binary Data Format===&lt;br /&gt;
All values big-endian, i.e. network byte order.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Header:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[2 bytes] version (must be 1)&lt;br /&gt;
[2 bytes] n1: size of the keyring subobject (should be 0x40)&lt;br /&gt;
[2 bytes] n2: size of the EKB subobject&lt;br /&gt;
[2 bytes] n3: size of the ID subobject&lt;br /&gt;
[2 bytes] n4: size of the signature subobject (must be 8)&lt;br /&gt;
[6 bytes] padding to get the main object header to 16 bytes&lt;br /&gt;
[n1 bytes] keyring subobject&lt;br /&gt;
[n2 bytes] EKB subobject&lt;br /&gt;
[n3 bytes] ID subobject&lt;br /&gt;
[n4 bytes] signature subobject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keyring subobject:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
subobject header:&lt;br /&gt;
  [12 bytes] subobject ID, must be &amp;quot;KEYRING     &amp;quot; (5 spaces at the end)&lt;br /&gt;
  [2 bytes] subobject slice size (should be 16)&lt;br /&gt;
  [2 bytes] subobject slice count (should be 3, does not include the header which always occupies one slice,&lt;br /&gt;
            so slice size can not be lower than 16 bytes)&lt;br /&gt;
&lt;br /&gt;
subobject body:&lt;br /&gt;
  [2 bytes] amount of used data bytes in the body (this field included, should be 0x28)&lt;br /&gt;
  [10 bytes] unknown&lt;br /&gt;
  [4 bytes] ID of the root key used to encrypt the keys in the keyring&lt;br /&gt;
  [8 bytes] file master key 3-DES encrypted by the root key.&lt;br /&gt;
  [8 bytes] content encryption key DES &amp;quot;decrypted&amp;quot; by the file master key&lt;br /&gt;
  [8 bytes] unknown&lt;br /&gt;
&lt;br /&gt;
subobject padding:&lt;br /&gt;
  [8 bytes] padding to fill the last slice&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EKB subobject:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(optional) header: &amp;quot;EKB &amp;quot; followed by 28 bytes of zero.&lt;br /&gt;
&lt;br /&gt;
(mandatory) The EKB:&lt;br /&gt;
  [4 bytes] EKB ID (should always match the required root key ID from the keyring)&lt;br /&gt;
  [4 bytes] reserved (usually 0x0)&lt;br /&gt;
  [24 bytes] key check value, this value 3-DES decrypted with the EKB root key should yield to:&lt;br /&gt;
            EKB root key + EKB ID + 4 bytes random padding (the value can be used to test&lt;br /&gt;
            if a root key is valid for an EKB if the ID is unknown)&lt;br /&gt;
  [4 bytes] tlen: tag length&lt;br /&gt;
  [4 bytes] dlen: data length&lt;br /&gt;
  [4 bytes] sig length&lt;br /&gt;
  [tlen bytes] tags (this can be used to see if a node key has an entry point in the EKB)&lt;br /&gt;
  [dlen bytes] blocks of 24 bytes, each being the root key for this EKB 3-DES encrypted with a node key&lt;br /&gt;
  [4 bytes] significant tag length&lt;br /&gt;
  [rest of the subobject] some ECDSA sigs, irrelevant for key recovery&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output of an EKB (from [http://samples.mplayerhq.hu/oma/03-Exodus.oma]):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EKB ID:       0x1001d&lt;br /&gt;
Reserved:     0x0&lt;br /&gt;
Unknown 3:    3947f40a33652f987173c39868c5235b8420c8cffb0e7f4e&lt;br /&gt;
Tag Length:   0xc&lt;br /&gt;
Data Length:  0x50&lt;br /&gt;
Sig Length:   0x34&lt;br /&gt;
Tags:         851451450402fffe00000000&lt;br /&gt;
Data:         36d200387491519da7759470a01769da Enc(K00000000,KR)&lt;br /&gt;
              6955aea69f6a3e6918c7c6bbd7ccfb1b Enc(K00000001,KR)&lt;br /&gt;
              818da9979067295cb7555aec211b9ebd Enc(K00000010,KR)&lt;br /&gt;
              d47ed90979e039a1e076680db8bfedb0 Enc(K00000011,KR)&lt;br /&gt;
              d32426b8f77922bd46c9449fdf0174c0 Enc(K11111111,KR)&lt;br /&gt;
Significant Tag Length:  0x8&lt;br /&gt;
Sig ID:       0x1&lt;br /&gt;
Sig Len:      0x28&lt;br /&gt;
 ECDSA r:     db546ac5e04d4fcbf2463b01de2cd0fbaf7aa71e&lt;br /&gt;
 ECDSA s:     ef442905979dbee7284ea4533a2f71c7cb865839&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
K00000000 is Sony&#039;s nomenclature meaning the key for the device group whose device ID starts with 0 bits of zero. See the EKB dumping script [https://wiki.physik.fu-berlin.de/linux-minidisc/doku.php?id=dump_ekb] for details on the EKB format and how to identify keys in the tag/data section. The ID of the key used by Sonic Stage in their .oma files is 0x0001001d, and this also seems to used in almost any .oma file out there.&lt;br /&gt;
&lt;br /&gt;
A more complex example of an EKB with key chains:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EKB ID:       0x1000a&lt;br /&gt;
Reserved:     0x0&lt;br /&gt;
Key chec val: 68869089b724181ee860041d2eb3fddbe74c7ccdb1e306c0&lt;br /&gt;
Tag Length:   0x1c&lt;br /&gt;
Data Length:  0x130&lt;br /&gt;
Sig Length:   0x34&lt;br /&gt;
Tags:         a49248039e4d208040007fffff8240e002492493fffff00000000000&lt;br /&gt;
Data:         2798095a2e864002d58f1f68fa25fb91 Enc(K000000000,KR)&lt;br /&gt;
              2545064deaca14f996bdc8a406c22b81 Enc(K000000010,KR)&lt;br /&gt;
              66eb2dff4e3752253f5915e451d94aad Enc(K0000000110,KR)&lt;br /&gt;
              a8ecfb6c65c949f7c47de8f96df6bd2b Enc(K00000001100000,K0000000110)&lt;br /&gt;
              7d5b1a6ef42253538b6b1dfb81380d4a Enc(K00000001100001,K0000000110)&lt;br /&gt;
              e7215b57914edff8a3d9930b5a4faa55 Enc(K00000001100010,K0000000110)&lt;br /&gt;
              24aa87026900960ab3df6a20a9f1ead4 Enc(K00000001100011,K0000000110)&lt;br /&gt;
              e66453a64523f244e2378b87d3518dc1 Enc(K00000001100100,K0000000110)&lt;br /&gt;
              be2d2af50cf2a2d9be91769e835e6300 Enc(K00000001100101,K0000000110)&lt;br /&gt;
              846a3f493e6dd0fddaf83beb59f7c1cf Enc(K00000001100110,K0000000110)&lt;br /&gt;
              569501035dbdc3e6a579482d76489800 Enc(K00000001100111,K0000000110)&lt;br /&gt;
              bd7983a89133d9e679210b241f4580e3 Enc(K00000000100000000,KR)&lt;br /&gt;
              62511ba02562e3166401caa2f4f2eb01 Enc(K0000000010000001010,KR)&lt;br /&gt;
              67ccc10fef049f9479c7eab249cc0560 Enc(K0000000010000001100,KR)&lt;br /&gt;
              a1955eeb7bd2fe5d2bb9cef90195c10a Enc(K0000000010000001110,KR)&lt;br /&gt;
              65d4735bac760a45788f669b26d4c0e0 Enc(K0000000010000010000,KR)&lt;br /&gt;
              80b14ed5872e3c6b0c987ae5961a9567 Enc(K0000000010000010010,KR)&lt;br /&gt;
              8a3bff4f583e6a8288cddcb6f5e05228 Enc(K0000000010000010100,KR)&lt;br /&gt;
              fe2357f456e78ba190db9bf231026a1f Enc(K00000000100000010000,KR)&lt;br /&gt;
Significant Tag Length:  0x17&lt;br /&gt;
Sig ID:       0x1&lt;br /&gt;
Sig Len:      0x28&lt;br /&gt;
 ECDSA r:     74a60db08631afd1374201938e3425adab577d30&lt;br /&gt;
 ECDSA s:     deb9c346ac19e889af451905fefd0024e3772cfe&lt;br /&gt;
  verify OK:  True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ID subobject:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The ID subobject consists of different sub-subobjects formatted like the keyring object, details unnecessary for key recovery.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Signature subobject:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The signature subobject is the single-DES CBC-MAC of the ID subobject, using a key derived from the file master key. You obtain the signature key by encrypting 8 bytes of 0 with the file master key. You can use this signature to verify that the key recovery worked.&lt;br /&gt;
&lt;br /&gt;
===EA3 Header===&lt;br /&gt;
In encrypted .oma files, the encryption field at offset 6/7 is set to 1 and the last 8 bytes of the header, i.e. offset 0x58 in that header, are the IV for the data starting at offset 0x60.&lt;br /&gt;
&lt;br /&gt;
==ATRAC3plus Decoder==&lt;br /&gt;
The current state of the ATRAC3plus decoder is unknown. Development has not been started during GSoC, but will afterwards.&lt;br /&gt;
&lt;br /&gt;
==Repository==&lt;br /&gt;
[https://github.com/plumbojumbo/FFmpeg https://github.com/plumbojumbo/FFmpeg]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
&lt;br /&gt;
You can reach me at firstname.lastname@gmail.com or as atuttle on Freenode. Feel free to get in touch with me if you have any questions.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
#&amp;lt;span id=&amp;quot;ref_anon&amp;quot;&amp;gt;The system has been extensively reverse engineered by an anonymous source on whose results this information and the implementation is gratefully based on.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*http://wiki.multimedia.cx/index.php?title=Oma&lt;br /&gt;
*http://www.waider.ie/hacks/workshop/c/mple/FILE_FORMAT_v2.txt&lt;br /&gt;
*https://wiki.physik.fu-berlin.de/linux-minidisc/doku.php?id=dump_ekb&lt;/div&gt;</summary>
		<author><name>Tuttle</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19246</id>
		<title>SoC 2011/OMA/Atrac Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19246"/>
		<updated>2011-05-23T07:35:09Z</updated>

		<summary type="html">&lt;p&gt;Tuttle: /* Week 1-3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoCProject|year=2011|student=[[User:tuttle|David Goldwich]]|mentor=Benjamin Larsson}}&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
I&#039;m working on the OMA demuxer in libavformat to implement a decryptor for OpenMG protected audio files. If I can complete this task in time, I will work on finishing an ATRAC3plus decoder for libavcodec.&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
&lt;br /&gt;
===Week 1-3===&lt;br /&gt;
&lt;br /&gt;
No development due to U.S. work/tax regulations.&lt;br /&gt;
&lt;br /&gt;
==Repository==&lt;br /&gt;
[https://github.com/plumbojumbo/FFmpeg https://github.com/plumbojumbo/FFmpeg]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
&lt;br /&gt;
You can reach me at firstname.lastname@gmail.com or as atuttle on Freenode. Feel free to get in touch with me if you have any questions.&lt;/div&gt;</summary>
		<author><name>Tuttle</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19245</id>
		<title>SoC 2011/OMA/Atrac Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_2011/OMA/Atrac_Improvements&amp;diff=19245"/>
		<updated>2011-05-23T07:33:23Z</updated>

		<summary type="html">&lt;p&gt;Tuttle: Created page with &amp;quot;{{SoCProject|year=2011|student=David Goldwich|mentor=Benjamin Larsson}}  ==Abstract==  I&amp;#039;m working on the OMA demuxer in libavformat to implement a decryptor for …&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoCProject|year=2011|student=[[User:tuttle|David Goldwich]]|mentor=Benjamin Larsson}}&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
I&#039;m working on the OMA demuxer in libavformat to implement a decryptor for OpenMG protected audio files. If I can complete this task in time, I will work on finishing an ATRAC3plus decoder for libavcodec.&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
&lt;br /&gt;
===Week 1-3===&lt;br /&gt;
&lt;br /&gt;
Developing halted due to U.S. work/tax regulations.&lt;br /&gt;
&lt;br /&gt;
==Repository==&lt;br /&gt;
[https://github.com/plumbojumbo/FFmpeg https://github.com/plumbojumbo/FFmpeg]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
&lt;br /&gt;
You can reach me at firstname.lastname@gmail.com or as atuttle on Freenode. Feel free to get in touch with me if you have any questions.&lt;/div&gt;</summary>
		<author><name>Tuttle</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=User:Tuttle&amp;diff=19244</id>
		<title>User:Tuttle</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=User:Tuttle&amp;diff=19244"/>
		<updated>2011-05-23T07:23:33Z</updated>

		<summary type="html">&lt;p&gt;Tuttle: Created page with &amp;quot;Hi there, my name is David Goldwich. I study computer science and philosophy at Free University of Berlin, but right now I&amp;#039;m in an exchange at University of California, Santa Cru…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi there, my name is David Goldwich. I study computer science and philosophy at Free University of Berlin, but right now I&#039;m in an exchange at University of California, Santa Cruz. In this year&#039;s Summer of Code I&#039;ll work on [[SoC_2011/OMA/Atrac_Improvements|improving the OMA demuxer]].&lt;br /&gt;
&lt;br /&gt;
Get in touch with me at firstname.lastname@gmail.com if you have any questions. You can also find me on Freenode as atuttle.&lt;/div&gt;</summary>
		<author><name>Tuttle</name></author>
	</entry>
</feed>