Skip to main content Link Search Menu Expand Document (external link)


Table of contents

  1. Enrollment
  2. Prerequisites
    1. CS61C Prerequisite
    2. CS61B Prerequisite
    3. CS70 Prerequisite
  3. Lecture
  4. Discussion Sections
  5. Office Hours
  6. Readings
  7. Exams
    1. Remote Exams
    2. Alternate Time Exams
  8. Homeworks
  9. Projects
  10. Grading
  11. Ed
  12. Collaboration Policy
    1. Permitted
    2. Absolutely Forbidden
  13. Student Support
    1. Extension Policy
    2. Extenuating Circumstances & Inclusion
      1. Student Support Meetings
    3. Mental Health & Wellness
    4. DSP
    5. Course Climate
  14. Ethics
  15. Land Statement
  16. Acknowledgements


Class listing on

In general, course staff does not control enrollment; we have to follow the department’s enrollment policies. We do not have any enrollment codes or any other way to let non-CS majors into the class. If you have any questions about enrollment, please reach out to the emails listed in the enrollment policies page.

If you are unable to enroll in the class right now, but plan to enroll later (e.g. you’re waiting for a CS major declaration to be processed), please email, so that we know who you are and can add you to course platforms.


The prerequisites for CS161 are CS61B, CS70, and CS61C.

We don’t formally enforce any prerequisites, and the enrollment system should not block you from enrolling or waitlisting if you haven’t taken the prerequisites. We will not drop you if you haven’t taken the prerequisites.

In addition to the prerequisite classes, we assume basic knowledge of C, Python, and Git. Some basic familiarity with Unix systems is helpful for Project 1. Project 2 is done in Go and we won’t have any lectures on Go syntax, so we expect you to be able to learn the basics of a new language on your own.

CS61C Prerequisite

We do not recommend taking CS161 without having taken CS61C (Computer Architecture), or equivalent, first. The content of CS61C is used in the first unit of the class (memory safety). You should not take this class unless you:

  • Understand the C and assembly sections of CS61C (Lectures 1-13 from Fall 2020 CS61C)
  • Can convert between decimal, binary, and hexadecimal
  • Can write a complex C program (100-200 lines)
  • Can use GDB to debug a C program
  • Can read and understand assembly code (e.g. x86 or RISC-V)
  • Can explain how a function is called in assembly (e.g. x86 or RISC-V) Here are some diagnostics you can use to test your CS61C preparedness:
  • Read Chapter 2 of our textbook, and make sure that you can follow along.
  • Make sure you can solve Q1 of this discussion worksheet (solutions).

CS61B Prerequisite

CS61B (Data Structures) is a prerequisite for understanding of basic data structures, familiarity with testing your own code, and familiarity with working on large codebases. This prerequisite is relevant for Project 2.

We try our best to re-introduce any specific CS61B topics as they appear in class, so the actual content of CS61B is not a hard prerequisite.

If you can implement a linked list from scratch, and you’re comfortable testing your own code, and you’re comfortable working in a codebase with 500-1000 lines of code, then you’ve fulfilled the CS61B prerequisite.

CS70 Prerequisite

CS70 (Discrete Math and Probability Theory) is a prerequisite for basic understanding of modular arithmetic/set notation, and the ability to follow mathematical proofs and explanations. This prerequisite is relevant in the cryptography unit.

We try our best to re-introduce any specific CS70 topics as they appear in class, so the actual content of CS70 is not a hard prerequisite.

If you can follow the explanations in this CS70 note on RSA encryption, then you’ve fulfilled the CS70 prerequisite.


We will have a 90-minute live lecture on Mondays and Wednesdays 6:30–8:00 PM. This is the listed lecture time on the course schedule. Lectures will start at Berkeley time.

We’ll try to livestream lectures over Zoom, but can’t promise that the tech will always work. The link to join lecture remotely is on Ed.

Lectures will be recorded and recordings will be posted. Lecture attendance is not taken.

Discussion Sections

Each TA will hold one 1-hour or 1.5-hour live discussion per week. Each TA will cover the same discussion worksheet. Discussions start the week of January 15.

There are three types of discussion sections:

  • Regular discussion sections focus on understanding the current material, and are 1 hour long.
  • Exam prep sections focus primarily on solving previous exam questions, and are 1 hour long.
  • Extended-time sections cover material at a slower pace and more in-depth, and are 1.5 hours long.

You can attend any discussion sections you want. (For example, you could attend one regular section and one exam prep section each week.) Discussion attendance is not taken. We’ll try to post recordings of discussion worksheets, but no promises.

The discussion schedule will be posted on the course calendar by the first day of class.

Office Hours

TAs and instructors will hold in-person and online office hours throughout the semester. We use an online queue to process help tickets.

The office hours schedule will be posted on the course calendar. Office hours start the week of January 22.


Readings come from the course textbook, which is freely available online. The textbook is optional, and lectures are the main source of truth in cases of ambiguity.

Some other optional textbooks are Introduction to Computer Security by Goodrich & Tamassia and The Craft of System Security by Smith & Marchesini. Contact staff if you want a copy.


The midterm is on Thursday, February 29, 7–9pm PT.

The final exam is on Friday, May 10, 2024, 3–6pm PT.

Please do not discuss the exam until solutions are released.

Remote Exams

We are offering remote exams only at the same time as the scheduled exam. There will be no remote exams starting at any other time. Specifically, if you are taking the midterm remotely, you must start your exam at 7pm PT on Thursday, February 29. If you are taking the final exam remotely, you must start your exam at 3pm PT on Friday, May 10.

In order to take the exams remotely, you need to agree to our video proctoring policy, which involves sending us a recording of a continuous video feed of you taking the exam. If you are not comfortable being recorded, you can always take the exam in-person.

We’ll release a form closer to the exams for you to sign up for a remote exam.

Alternate Time Exams

If you are unable to take the exam at the scheduled time, we will be offering only one alternate exam time, in-person only, immediately after the scheduled exam. Specifically, the alternate midterm time is Thursday, February 29, 9–11pm PT. The alternate final exam time is Friday, May 10, 6–9pm PT. There are no other alternate exam times. There are no remote exams at alternate times.

We are only offering the alternate exam time if you are unable to take the exam at the normal time. For example, if you have another exam at the same time, you can take the alternate-time exam. However, wanting a break between non-conflicting exams would not be a valid reason to take the alternate-time exam, because in this case you are able to take the exam at the normal time.

We’ll release a form closer to the exams for you to sign up for an alternate-time exam.


There will be 7 homeworks, released every week, and due on Friday nights at 11:59 PM PT. Homeworks will be submitted electronically via Gradescope. Homeworks cannot be turned in late unless you have extensions or accommodations.

If you’re auditing the class and would like access to homeworks, or you would like blank practice copies of the homework to study with, you can join the CS 161 Auditors Gradescope class with the join code G2DR3D.


There will be 3 course projects. All projects may be done in groups of two or individually. Projects cannot be turned in late unless you have extensions or accommodations.

Projects 1 and 3 can be submitted as often as you like before the deadline. Most students receive a full score on the coding portions of these projects.

Project 2 has a coding portion with hidden autograder tests. We will only run tests on your code and release scores after you have made your final submission. The average score on the coding portion of Project 2 is around 60%, and the score distribution is similar to an exam distribution.


We will compute grades from a weighted average, as follows:

  • Homeworks: 10% (equally weighted)
  • Project 1: 10%
  • Project 2: 20%
  • Project 3: 10%
  • Midterm: 20%
  • Final: 30%
Course PointsGrade

The class as a whole has been, and will continue to be, curved to the department guidelines for upper-division CS classes. Previous grade distributions on Berkeleytime are also good indicators of the curve.

This is the very first time this course has ever published bins for grades. Please treat these as tentative and flexible to provide you an idea of what your minimum potential grade is, meaning they could be shifted down in order to meet the department guidelines. There’s no guarantee that bins will be shifted, and we do not know whether they will be shifted until after the final exam (so don’t ask). Bins will not shift up; for example, if you have an 90 in the course, you are guaranteed at least an A. To be transparent, these bins have been artificially inflated to be higher than historical grade distributions for this course to provide you an idea of what your minimum potential grade is. These bins should give you an idea of where you are in the course more than when the class was solely curved; however, they are not a universal truth.


If you have a question, the best way to contact us is via the course Ed site. The staff (instructors and TAs) will check the site regularly.

If your question is personal or not of interest to other students, please mark the question as private.

Collaboration Policy

We believe that most students can distinguish between helping other students understand course material and cheating. Explaining a subtle point from lecture or discussing course topics is an interaction that we encourage, but you must write your solutions strictly by yourself (with your partner on projects). You must not ask for homework/project solutions on Stack Overflow or other online sites; although you may ask for help with conceptual questions. You must not receive help on assignments from students who have taken the course in previous years, and you must not review homework or project solutions from previous years.

Before you’ve submitted your final work for a project, you should never be in possession of solution code that you (or your partner) did not write. You will be equally culpable if you distribute (even unknowingly) such code to other students or future students of CS 161.

You must ensure that your solutions will not be visible to other students. DO NOT GIVE ANYONE YOUR CODE! DO NOT POST SOLUTIONS TO PROJECTS ONLINE. If you use GitHub or another source control system to store your solutions electronically, you must ensure your account is configured so your solutions are not publicly visible. If you use GitHub, it offers free private repositories that allow you to keep your solutions private; please use one.

Test cases that you write are also considered part of your solution. You may not share your test cases, or use test cases that were not written by yourself.

If you’re not sure what you’re doing is OK, please ask.

Listed below are some non-comprehensive examples of what is allowed, and disallowed.


  • Discussion of approaches for solving a problem. Such help should be cited as comments in your code. For the sake of others’ learning experience, we ask that you try not to give away anything juicy, and instead try to lead people to such solutions.
  • Discussion of specific syntax issues and bugs in your code, without showing another student your code. Verbally discussing syntax issues is permitted, but Zoom screen sharing your code, for example, is never permitted. Cite any non course staff (course staff meaning Reader, TA, and Instructor) person you received advice from.
  • Using small snippets of non-161 code that you find online for solving tiny problems such as code for iterating through a map in Go. Such usages must be cited in comments in your code.

Absolutely Forbidden

  • Typing or dictating code into someone else’s computer.
  • Looking at someone else’s project code to understand a particular idea or part of a project.
  • Possessing project solution code that you did not write yourself or another student’s project code in any form, be it electronic or on paper. This includes the situation where you’re trying to help someone debug. Distributing such code is equally forbidden.
  • Possessing, distributing, looking at, or using Project 2 test cases that were not written by your group.
  • Posting solution code to any assignment in a public place (e.g. a public git repository, mediafire, etched into stones above the Mediterranean, etc). This applies even after the semester is over.
  • Leaving your code in an insecure place such that other students can take the code and use it (even if it happens without your knowledge).
  • Using automatic code generators such as ChatGPT and Github Copilot.
  • Working in lock-step with other students. Your workflow should not involve a group of people identifying, tackling, and effectively identically solving a sequence of subproblems.

Warning: Your attention is drawn to the Department’s Policy on Academic Dishonesty. In particular, you should be aware that copying or sharing solutions, in whole or in part, from other students in the class or any other source without acknowledgement constitutes cheating. If you are found liable for misconduct, you will receive all of these penalties:

  1. Referral to the Center for Student Conduct (CSC)
  2. Negative points on the entire assignment (for example, even if you copy only one test case in Project 2, you would receive negative points on the entire project)
  3. Depending on severity, a failing grade in the course

If you work in a group, the penalties apply for all group members, even if only one group member engaged in misconduct, or if the other group member was unaware of the misconduct.

These policies have been consistently applied for many semesters, and in order to ensure consistency and avoid biases, we cannot reduce the penalties or make any exceptions, even if you ask us.

This policy is not a game to be defeated, and such circumventions will be seen as plagiarism.

Student Support

Extension Policy

We understand that life is unpredictable, and want to work with you to make sure you are supported. While we do not provide slip days in this course, please request an extension for any deadline by filling out this form.

For projects with multiple components (e.g. code + write-up), we’ll calculate your submission time using the latest component you submitted. For example, if you submit code 1 day late and the write-up 2 days late, the entire project is considered 2 days late.

Extenuating Circumstances & Inclusion

We recognize that our students come from varied backgrounds and have widely-varying experiences. As instructors, our goal is to teach you the material in our course. The more accessible we can make it, the better. If you encounter extenuating circumstances, please do not hesitate to let us know. The sooner we are made aware, the more options we have available to us to help. We believe in the crucial importance of creating a learning environment that is welcoming and respectful to students of all backgrounds. The following are specific steps that will help us in achieving this goal:

  • If you feel your academic performance has been impacted negatively due to a lack of inclusion, or due to experiences outside of class such as current events or family matters, please reach out to the instructors and staff. Our job is not only to teach but to support you in every way we can.
  • If something is said in class (by anyone) that makes you feel uncomfortable, disrespected, or excluded by a staff member or fellow student, please report the incident so that we can work to address the issue and create a more supportive and inclusive learning environment. Some options are:
  • If we have inadvertently scheduled an exam or major deadline that creates a conflict with your religious observances, please let us know as soon as possible so that we can make other arrangements.
  • If your name differs from your legal name, you may designate a preferred name for the classroom by following these steps.
  • Pronouns can be different for each student and should not be assumed. If you are misgendered by staff or another student, please respond however is best for you in the moment. If you’re open to letting us know about the incident via email ( or through the anonymous reporting form, we would really appreciate it, so we can both make sure you are appropriately addressed and continue to build habits of inclusion in our staff.
  • If you’re in need of laptops, Wi-Fi hotspots, or other required technologies, check out the Student Technology Equity Program.

Student Support Meetings

One way to get individualized support is through a student support or accommodation appointment meeting. You can book one through this google calendar link. In this meeting you can chat with a member of staff 1-1 to discuss any extenuating circumstances, extensions and a schedule of deadlines, studying strategies, and just generally anything 161 related. The main host is Jordan, however, if there is a different member of staff you would prefer to meet with, please email us. If Jordan is unavailable at the time your appointment is booked, your calendar event will be updated to reflect who is hosting your meeting.

Mental Health & Wellness

As a student you may experience a range of issues that can cause barriers to learning, such as strained relationships, increased anxiety, depression, difficulty concentrating and/or lack of motivation. These mental health concerns or stressful events may lead to diminished academic performance or reduce a student’s ability to participate in daily activities. UC offers services to assist you with addressing these and other concerns you may be experiencing.

If you or someone you know are suffering from any of the aforementioned conditions, consider the following services available to you:


We committed to creating a learning environment that meets the needs of its diverse student body including students with disabilities. If you anticipate or experience any barriers to learning in this course, please feel welcome to discuss your concerns with the instructor, Peyrin, or student support head TA, Jordan. All DSP and accommodations-related materials for this course are kept in a repository separate from the rest of the course materials that is visible only to those two staff members and course managers. Course managers are members of department staff, unlike course staff, that help manage situations such as DSP accommodations.

If you have a disability, or think you may have a disability, you can work with the Disabled Students’ Program (DSP) to request an official accommodation. The Disabled Students’ Program (DSP) is the campus office responsible for authorizing disability-related academic accommodations, in cooperation with the students themselves and their instructors. You can find more information about DSP, including contact information and the application process here. Students registered with DSP can expect to receive an onboarding email within a week of sending us your formal letter of accommodation through the AIM portal.

Course Climate

As a member of the CS 161 community, realize that you have an important duty to help other students and staff feel respected in helping create an inclusive learning environment.

It is our expectation that all interactions with course staff and other students will demonstrate appropriate respect, consideration, and compassion for others. Please remember to be friendly and thoughtful; our community draws from a wide spectrum of valuable experiences. For further reading, please reference the Berkeley Principles of Community and Berkeley Campus Code of Student Conduct.

For exceptionally rude or disrespectful behavior toward the course staff or other students, your final grade will be lowered by up to a full letter grade (e.g., from an A- to a B-) at the discretion of the course instructors. You don’t need to be concerned about this policy if you treat other human beings with even a bare minimum of respect and consideration and do not engage in behavior that is actively harmful to others.


We will be discussing attacks in this class, some of them quite nasty. None of this is in any way an invitation to undertake these attacks in any fashion other than with informed consent of all involved and affected parties. The existence of a security hole is no excuse. These issues concern not only professional ethics, but also UCB policy and state and federal law. If there is any question in your mind about what conduct is allowable, contact the instructors first.

Land Statement

We recognize that Berkeley sits on the territory of Huichin, the ancestral and unceded land of the Chochenyo Ohlone, the successors of the historic and sovereign Verona Band of Alameda County. This land was and continues to be of great importance to the Ohlone people. We recognize that every member of the Berkeley community has, and continues to benefit from the use and occupation of this land, since the institution’s founding in 1868. Consistent with our values of community and diversity, we have a responsibility to acknowledge and make visible the university’s relationship to Native peoples. By offering this Land Acknowledgment, we affirm Indigenous sovereignty and will work to hold University of California Berkeley more accountable to the needs of American Indian and Indigenous peoples.


Parts of the syllabus have been adapted from CS61A, CS61B, CS61C, CS188, and CS152.