annotate submit.m @ 6:141d81a2acf5 default tip

Remove usage of sum function in cost function (thanks Jeroen Willems)
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Tue, 08 Nov 2011 03:30:56 -0500 (2011-11-08)
parents 5664e0047b3e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
1 function submit(partId)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
2 %SUBMIT Submit your code and output to the ml-class servers
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
3 % SUBMIT() will connect to the ml-class server and submit your solution
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
4
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
5 fprintf('==\n== [ml-class] Submitting Solutions | Programming Exercise %s\n==\n', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
6 homework_id());
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
7 if ~exist('partId', 'var') || isempty(partId)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
8 partId = promptPart();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
9 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
10
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
11 % Check valid partId
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
12 partNames = validParts();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
13 if ~isValidPartId(partId)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
14 fprintf('!! Invalid homework part selected.\n');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
15 fprintf('!! Expected an integer from 1 to %d.\n', numel(partNames) + 1);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
16 fprintf('!! Submission Cancelled\n');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
17 return
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
18 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
19
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
20 [login password] = loginPrompt();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
21 if isempty(login)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
22 fprintf('!! Submission Cancelled\n');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
23 return
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
24 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
25
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
26 fprintf('\n== Connecting to ml-class ... ');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
27 if exist('OCTAVE_VERSION')
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
28 fflush(stdout);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
29 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
30
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
31 % Setup submit list
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
32 if partId == numel(partNames) + 1
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
33 submitParts = 1:numel(partNames);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
34 else
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
35 submitParts = [partId];
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
36 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
37
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
38 for s = 1:numel(submitParts)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
39 % Submit this part
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
40 partId = submitParts(s);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
41
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
42 % Get Challenge
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
43 [login, ch, signature] = getChallenge(login);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
44 if isempty(login) || isempty(ch) || isempty(signature)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
45 % Some error occured, error string in first return element.
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
46 fprintf('\n!! Error: %s\n\n', login);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
47 return
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
48 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
49
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
50 % Attempt Submission with Challenge
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
51 ch_resp = challengeResponse(login, password, ch);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
52 [result, str] = submitSolution(login, ch_resp, partId, output(partId), ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
53 source(partId), signature);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
54
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
55 fprintf('\n== [ml-class] Submitted Homework %s - Part %d - %s\n', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
56 homework_id(), partId, partNames{partId});
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
57 fprintf('== %s\n', strtrim(str));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
58 if exist('OCTAVE_VERSION')
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
59 fflush(stdout);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
60 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
61 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
62
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
63 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
64
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
65 % ================== CONFIGURABLES FOR EACH HOMEWORK ==================
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
66
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
67 function id = homework_id()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
68 id = '2';
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
69 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
70
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
71 function [partNames] = validParts()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
72 partNames = { 'Sigmoid Function ', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
73 'Logistic Regression Cost', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
74 'Logistic Regression Gradient', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
75 'Predict', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
76 'Regularized Logistic Regression Cost' ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
77 'Regularized Logistic Regression Gradient' ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
78 };
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
79 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
80
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
81 function srcs = sources()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
82 % Separated by part
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
83 srcs = { { 'sigmoid.m' }, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
84 { 'costFunction.m' }, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
85 { 'costFunction.m' }, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
86 { 'predict.m' }, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
87 { 'costFunctionReg.m' }, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
88 { 'costFunctionReg.m' } };
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
89 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
90
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
91 function out = output(partId)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
92 % Random Test Cases
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
93 X = [ones(20,1) (exp(1) * sin(1:1:20))' (exp(0.5) * cos(1:1:20))'];
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
94 y = sin(X(:,1) + X(:,2)) > 0;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
95 if partId == 1
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
96 out = sprintf('%0.5f ', sigmoid(X));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
97 elseif partId == 2
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
98 out = sprintf('%0.5f ', costFunction([0.25 0.5 -0.5]', X, y));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
99 elseif partId == 3
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
100 [cost, grad] = costFunction([0.25 0.5 -0.5]', X, y);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
101 out = sprintf('%0.5f ', grad);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
102 elseif partId == 4
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
103 out = sprintf('%0.5f ', predict([0.25 0.5 -0.5]', X));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
104 elseif partId == 5
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
105 out = sprintf('%0.5f ', costFunctionReg([0.25 0.5 -0.5]', X, y, 0.1));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
106 elseif partId == 6
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
107 [cost, grad] = costFunctionReg([0.25 0.5 -0.5]', X, y, 0.1);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
108 out = sprintf('%0.5f ', grad);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
109 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
110 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
111
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
112 function url = challenge_url()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
113 url = 'http://www.ml-class.org/course/homework/challenge';
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
114 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
115
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
116 function url = submit_url()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
117 url = 'http://www.ml-class.org/course/homework/submit';
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
118 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
119
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
120 % ========================= CHALLENGE HELPERS =========================
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
121
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
122 function src = source(partId)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
123 src = '';
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
124 src_files = sources();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
125 if partId <= numel(src_files)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
126 flist = src_files{partId};
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
127 for i = 1:numel(flist)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
128 fid = fopen(flist{i});
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
129 while ~feof(fid)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
130 line = fgets(fid);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
131 src = [src line];
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
132 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
133 fclose(fid);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
134 src = [src '||||||||'];
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
135 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
136 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
137 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
138
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
139 function ret = isValidPartId(partId)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
140 partNames = validParts();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
141 ret = (~isempty(partId)) && (partId >= 1) && (partId <= numel(partNames) + 1);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
142 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
143
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
144 function partId = promptPart()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
145 fprintf('== Select which part(s) to submit:\n', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
146 homework_id());
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
147 partNames = validParts();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
148 srcFiles = sources();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
149 for i = 1:numel(partNames)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
150 fprintf('== %d) %s [', i, partNames{i});
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
151 fprintf(' %s ', srcFiles{i}{:});
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
152 fprintf(']\n');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
153 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
154 fprintf('== %d) All of the above \n==\nEnter your choice [1-%d]: ', ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
155 numel(partNames) + 1, numel(partNames) + 1);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
156 selPart = input('', 's');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
157 partId = str2num(selPart);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
158 if ~isValidPartId(partId)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
159 partId = -1;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
160 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
161 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
162
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
163 function [email,ch,signature] = getChallenge(email)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
164 str = urlread(challenge_url(), 'post', {'email_address', email});
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
165
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
166 str = strtrim(str);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
167 [email, str] = strtok (str, '|');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
168 [ch, str] = strtok (str, '|');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
169 [signature, str] = strtok (str, '|');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
170 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
171
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
172
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
173 function [result, str] = submitSolution(email, ch_resp, part, output, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
174 source, signature)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
175
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
176 params = {'homework', homework_id(), ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
177 'part', num2str(part), ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
178 'email', email, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
179 'output', output, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
180 'source', source, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
181 'challenge_response', ch_resp, ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
182 'signature', signature};
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
183
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
184 str = urlread(submit_url(), 'post', params);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
185
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
186 % Parse str to read for success / failure
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
187 result = 0;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
188
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
189 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
190
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
191 % =========================== LOGIN HELPERS ===========================
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
192
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
193 function [login password] = loginPrompt()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
194 % Prompt for password
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
195 [login password] = basicPrompt();
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
196
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
197 if isempty(login) || isempty(password)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
198 login = []; password = [];
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
199 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
200 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
201
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
202
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
203 function [login password] = basicPrompt()
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
204 login = input('Login (Email address): ', 's');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
205 password = input('Password: ', 's');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
206 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
207
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
208
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
209 function [str] = challengeResponse(email, passwd, challenge)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
210 salt = ')~/|]QMB3[!W`?OVt7qC"@+}';
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
211 str = sha1([challenge sha1([salt email passwd])]);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
212 sel = randperm(numel(str));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
213 sel = sort(sel(1:16));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
214 str = str(sel);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
215 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
216
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
217
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
218 % =============================== SHA-1 ================================
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
219
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
220 function hash = sha1(str)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
221
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
222 % Initialize variables
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
223 h0 = uint32(1732584193);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
224 h1 = uint32(4023233417);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
225 h2 = uint32(2562383102);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
226 h3 = uint32(271733878);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
227 h4 = uint32(3285377520);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
228
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
229 % Convert to word array
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
230 strlen = numel(str);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
231
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
232 % Break string into chars and append the bit 1 to the message
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
233 mC = [double(str) 128];
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
234 mC = [mC zeros(1, 4-mod(numel(mC), 4), 'uint8')];
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
235
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
236 numB = strlen * 8;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
237 if exist('idivide')
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
238 numC = idivide(uint32(numB + 65), 512, 'ceil');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
239 else
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
240 numC = ceil(double(numB + 65)/512);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
241 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
242 numW = numC * 16;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
243 mW = zeros(numW, 1, 'uint32');
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
244
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
245 idx = 1;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
246 for i = 1:4:strlen + 1
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
247 mW(idx) = bitor(bitor(bitor( ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
248 bitshift(uint32(mC(i)), 24), ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
249 bitshift(uint32(mC(i+1)), 16)), ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
250 bitshift(uint32(mC(i+2)), 8)), ...
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
251 uint32(mC(i+3)));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
252 idx = idx + 1;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
253 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
254
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
255 % Append length of message
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
256 mW(numW - 1) = uint32(bitshift(uint64(numB), -32));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
257 mW(numW) = uint32(bitshift(bitshift(uint64(numB), 32), -32));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
258
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
259 % Process the message in successive 512-bit chs
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
260 for cId = 1 : double(numC)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
261 cSt = (cId - 1) * 16 + 1;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
262 cEnd = cId * 16;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
263 ch = mW(cSt : cEnd);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
264
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
265 % Extend the sixteen 32-bit words into eighty 32-bit words
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
266 for j = 17 : 80
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
267 ch(j) = ch(j - 3);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
268 ch(j) = bitxor(ch(j), ch(j - 8));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
269 ch(j) = bitxor(ch(j), ch(j - 14));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
270 ch(j) = bitxor(ch(j), ch(j - 16));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
271 ch(j) = bitrotate(ch(j), 1);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
272 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
273
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
274 % Initialize hash value for this ch
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
275 a = h0;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
276 b = h1;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
277 c = h2;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
278 d = h3;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
279 e = h4;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
280
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
281 % Main loop
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
282 for i = 1 : 80
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
283 if(i >= 1 && i <= 20)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
284 f = bitor(bitand(b, c), bitand(bitcmp(b), d));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
285 k = uint32(1518500249);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
286 elseif(i >= 21 && i <= 40)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
287 f = bitxor(bitxor(b, c), d);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
288 k = uint32(1859775393);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
289 elseif(i >= 41 && i <= 60)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
290 f = bitor(bitor(bitand(b, c), bitand(b, d)), bitand(c, d));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
291 k = uint32(2400959708);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
292 elseif(i >= 61 && i <= 80)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
293 f = bitxor(bitxor(b, c), d);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
294 k = uint32(3395469782);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
295 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
296
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
297 t = bitrotate(a, 5);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
298 t = bitadd(t, f);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
299 t = bitadd(t, e);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
300 t = bitadd(t, k);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
301 t = bitadd(t, ch(i));
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
302 e = d;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
303 d = c;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
304 c = bitrotate(b, 30);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
305 b = a;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
306 a = t;
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
307
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
308 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
309 h0 = bitadd(h0, a);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
310 h1 = bitadd(h1, b);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
311 h2 = bitadd(h2, c);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
312 h3 = bitadd(h3, d);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
313 h4 = bitadd(h4, e);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
314
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
315 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
316
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
317 hash = reshape(dec2hex(double([h0 h1 h2 h3 h4]), 8)', [1 40]);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
318
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
319 hash = lower(hash);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
320
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
321 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
322
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
323 function ret = bitadd(iA, iB)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
324 ret = double(iA) + double(iB);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
325 ret = bitset(ret, 33, 0);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
326 ret = uint32(ret);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
327 end
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
328
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
329 function ret = bitrotate(iA, places)
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
330 t = bitshift(iA, places - 32);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
331 ret = bitshift(iA, places);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
332 ret = bitor(ret, t);
5664e0047b3e Initial commit
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
333 end